题目: 颠倒一个句子中的词的顺序,比如: 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之间字符串的顺序,也就相当于把一个单词的顺序正过来