[剑指offer]翻转句子 ; 左旋字符串

来源:互联网 发布:淘宝介入假冒品牌 编辑:程序博客网 时间:2024/04/29 16:53
/*    42:> 翻转句子 ; 左旋字符串    i am student -> student am i (整体翻转,局部翻转)*/void Reserve(char* pBegin, char* pEnd){    if (pBegin == NULL || pEnd == NULL || pBegin+1==pEnd)        return;    while (pBegin < pEnd)    {        std::swap(*pBegin,*pEnd);        pBegin++;        pEnd--;    }}void ReserveSentense(char* pData){    if (pData == NULL)        return;    char* pBegin = pData;    char* pEnd = pBegin;    while (*pEnd != '\0')        pEnd++;    pEnd--;  //指向尾    Reserve(pBegin, pEnd);//整体翻转    pEnd = pBegin = pData;    while (*pBegin != '\0')    {        if (*pBegin == ' ')        {            pBegin++;            pEnd++;        }        else if (*pEnd == ' ' || *pEnd == '\0')        {            Reserve(pBegin, --pEnd);            pBegin = ++pEnd;        }        else            ++pEnd;    }}//void test()//{//  //char ar[] = "i am a student";//  char ar[] = "                                i am a student";//  ReserveSentense(ar);//  cout << ar /*<< endl*/;//}/*    左旋单词    abcdefg ->2 -> cdefgab    分两部分 ab cdefg     整体翻转 部分翻转*/void LeftRotateStr(char*pStr, int n){    if (pStr == NULL || n<= 0)        return;    int len = strlen(pStr);    n %= len;//大于长度会指向非法内存    char* pFirstStart = pStr;    char* pFirstEnd = pStr + n - 1;    char* pSecondStart = pStr + n;    char* pSecondEnd = pStr + len - 1;    Reserve(pFirstStart, pFirstEnd);    Reserve(pSecondStart, pSecondEnd);    Reserve(pFirstStart, pSecondEnd);}//void test()//{//  char ar[] = "i am a student";//  //  LeftRotateStr(ar,15);//  cout << ar << endl;//}
2 0
原创粉丝点击