主要思想:先寫出單詞逆序的函數,再寫整個句子逆序的函數(在其中查找單詞,找到後調用單詞逆序的函數逆序,最後將整個句子逆序)。
程序缺點:只能識別幾個常用的標點符號
源代碼及測試程序:
//給定一個字符串,按單詞將該字符串逆序,含標點
#include<stdio.h>
//start 和 end 之間逆序的函數
void reverse_word(char *start, char *end)
{
while(start < end)
{
*start = *start ^ *end;
*end = *start ^ *end;
*start = *start++ ^ *end--;
}
}
char *reverse_sentence(char *str)
{
char *start = str;
char *end = str;
while(*end != '\0')
{
if(*end==' ' || *end=='!' || *end==',' || *end=='.' || *end=='?')//查到一個單詞
{
if(start < end)//只有一個字母的單詞不逆序
reverse_word(start, end-1);
while(*end==' ' || *end=='!' || *end==',' || *end=='.' || *end=='?')
end++; //指向下一個單詞首字符
start = end;
}
else
end++;
}
reverse_word(str, end-1);//整個句子逆序
return str;
}
int main(int argc, char *argv[])
{
char str[] = "Hello, I am glad to see you!";
printf("%s\n", str);
printf("%s\n", reverse_sentence(str));
return 0;
}