举例:
I love cpp
翻转后
cpp love I
算法: 先翻转整个句子,再翻转每个单词
#include <stdio.h>
#include <string.h>
void reverseInPlace( char *input, int start, int end )
{
char *s = input + start;
char *e = input + end;
while ( s < e )
{
char tmp = *s;
*s = *e;
*e = tmp;
s++;
e--;
}
}
void reverseSentence ( char sentence[] )
{
reverseInPlace(sentence,0,strlen(sentence)-1); //翻转整个句子
int len = strlen(sentence);
int start = 0;
int end = 0;
bool lastIsChar = false;
char *tmp = sentence;
while ( '\0' != *tmp )
{
if ( *tmp != ' ' )
{
if ( lastIsChar == false )
{
lastIsChar = true;
start = tmp - sentence;
}
}
else if ( ' ' == *tmp )
{
if ( lastIsChar == true )
{
lastIsChar = false;
end = tmp -sentence-1;
reverseInPlace(sentence,start,end);
}
}
tmp ++;
}
if ( lastIsChar == true )
{
reverseInPlace(sentence,start,tmp-sentence-1);
}
}
int main(int argc,char *argv[])
{
char sentence1[] = "I love csdn ";
reverseSentence(sentence1);
fprintf(stderr,"%s",sentence1);
fprintf(stderr,"\n");
char sentence2[] = " but csdn don't love me";
reverseSentence(sentence2);
fprintf(stderr,"%s",sentence2);
return 0;
}