1、翻转单词顺序
#include <iostream>
using namespace std;
void reverse(char *pBegin,char *pEnd)
{
if(pBegin == NULL||pEnd == NULL )
return;
while(pBegin<pEnd)
{
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
pBegin++;
pEnd--;
}
}
char* reverseString(char *str)
{
char *pBegin = str;
char *pEnd = str;
while(*pEnd!='\0')
{
pEnd++;
}
pEnd--;
reverse(pBegin,pEnd);
pBegin = str;
pEnd = str;
while(*pBegin!='\0')
{
if(*pBegin==' ')
{
pBegin++;
pEnd++;
}
else if(*pEnd == ' '||*pEnd == '\0')//过滤掉每个单词之前的空格
{
reverse(pBegin,--pEnd);
pBegin = ++pEnd;
}
else
{
pEnd++;
}
}
return str;
}
int main()
{
char string[]="I love linux program!";
printf("%s\n",string);
reverseString(string);
printf("%s\n",string);
return 0;
}
2、左旋转字符串
#include<iostream>
using namespace std;
void reverse(char *begin ,char *end)
{
if(begin==NULL||end==NULL)
return;
while(begin<end)
{
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
}
char* leftRotateString(char* str,int n)
{
if(str ==NULL||n<=0)
{
return NULL;
}
char* begin = str;
char* end = str;
for(int i = 0; i<n-1; i++) //注意边界
{
end++;
}
char* mid = end;
reverse(begin,mid);
while(*end!='\0')
{
end++;
}
end--;
reverse(++mid,end);//注意边界
reverse(begin,end);
return str;
}
int main()
{
char string[] = "abcdefg";
printf("%s\n",string);
leftRotateString(string,4);
printf("%s\n",string);
return 0;
}