题解 | #单词倒排#
方法一:单词原地逆序
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void reverse(char* pa, char* pb)
{
while (pa < pb)
{
char temp = *pa;
*pa = *pb;
*pb = temp;
pa++;
pb--;
}
}
int main()
{
char ch[10000] = { 0 };
gets(ch);
int x = 0, y = 0;
int n = strlen(ch);
for (int i = 0; i < n; i++)
{
if (isalpha(ch[i]))//寻找每个单词的首字母
{
x = i;//用x记录首字母位置
y = i;//用y接收i,继而寻找该字母的尾字母的位置
while (isalpha(ch[y]))
{
y++;
}
--y;//找到尾字母的位置
reverse(&ch[x], &ch[y]);//对该单词进行逆置
i = y;//将遍历因子的位置改为y的位置,下次遍历位置会从该尾字母后开始
}
}
for (int i = n - 1; i >= 0; i--)//从后向前遍历,打印所有单词
{
if (isalpha(ch[i]))
{
printf("%c", ch[i]);
}
else
{
printf(" ");
}
}
return 0;
}
方法二:直接打印
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char ch[1000] = { 0 };
gets(ch);
int i;
for (i = strlen(ch) - 1; i >= 0; i--)
{
if (!isalpha(ch[i]))
{
printf("%s", &ch[i + 1]);
ch[i] = '\0';//为下一次的打印创造条件
printf(" ");
}
}
printf("%s", ch);
return 0;
}
该题库类似题目:HJ13--句子逆序这是俺的题解链接🤔
