按单词逆序句子(含标点)
主要思想:先写出单词逆序的函数,再写整个句子逆序的函数(在其中查找单词,找到后调用单词逆序的函数逆序,最后将整个句子逆序)。
程序缺点:只能识别几个常用的标点符号
源代码及测试程序:
//给定一个字符串,按单词将该字符串逆序,含标点 #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; }