思路:
将各个单词逆序,然后整体逆序。
例如:
I like beijing;
①I ekil gnijieb
②整体逆置:beijing like I
代码实现如下:
/*************************************************
题目: 给定一个字符串,按单词将该字符串逆序,不包括标点
如输入"hello world",输出为"world hello"。
*************************************************/
#include<stdio.h>
#include <stdlib.h>
void reverseWord(char* start, char* end)
{
char temp;
while (start < end)
{
temp = *start;
*start = *end;
*end = temp;
*start++;
*end--;
}
}
int main() {
char s[100] = "I am a boy";
// printf("please input a string:\n");
//gets(s); //从stdio流中读取字符串,直至接受到换行符或EOF时停止
char* p = s;
char* q = s;
printf("倒序前:%s\n", s);
printf("开始地址:%x\n", q);
while (*q != '\0')
{
if (' ' == *q) //单词结尾:q首次遇到空格(此时将单词头地址p,和单词尾地址q-1)
{
printf("第一个空格地址:%x\n", q);
reverseWord(p, q - 1);
while (' ' == *q) //单词开头:q跳若干空格后下一单词首字符
{
printf("space skip地址:%x\n", q);
q++;
}
p = q; //单词头地址赋值给p
}
else
{
q++; //单词内部地址自加
}
}
reverseWord(p, q - 1); //将最后一个单词逆序
reverseWord(s, q - 1); //将整句话逆序
printf("结尾地址:%x\n", q);
printf("倒序后:%s\n", s);
system("pause");
return 0;
}
运行结果如下: