题目: 颠倒一个句子中的词的顺序,比如: I am a student
颠倒后变成:student a am I
此题紧接着第3题,不过要把第3题的函数做一定修改
#include <stdio.h> #include <string.h> char* reverse(char* str, int n) { int end = n - 1; int start = 0; while(start<end) { str[start] ^= str[end]; str[end] ^= str[start]; str[start] ^= str[end]; ++start; --end; } return str; } char* reverse_word(char* str) { char* p1 = reverse(str, strlen(str)); char* p2; while(*p1 != '\0') { while(*p1 == ' ' && *p1 != '\0') p1++; p2 = p1; while(*p1 != ' ' && *p1 != '\0' ) p1++; reverse(p2, p1-p2); } return str; } int main() { char str[] = "my name is steve marbo"; printf("before reverse:\n"); printf("%s\n", str); printf("after reverse:\n"); puts(reverse_word(str)); }reverse函数的第二个参数n,是需要倒置的字符串的长度
reverse_word(char* str) 的思路是这样的:
假定一个字符串 I am a student
第一步:先把整个字符串倒置得到 tneduts a ma I
第二步:以空格作为分割符,倒置相邻两个空格中的内容
所以,在reverse_word(char* str)中,p1指向下一个空格的位置,p2指向前一个空格的位置,然后颠倒p2~p1之间字符串的顺序,也就相当于把一个单词的顺序正过来