本题来自《C语言程序设计——现代方法》第八章编程题14,任务是编写一个程序来反转输入句子中的单词顺序。
例如,输入:
Enter a sentence: you can cage a swallow can't you?
期望输出:
Reversed sentence: you can't swallow a cage can you?
解决方案概述:
使用getchar()
函数读取每个字符,直到遇到句号、问号或感叹号等终止符号为止。这些终止符号会被单独存储。然后,从最后一个非空格字符开始向前遍历字符串,每遇到一个空格就停止,打印出当前的单词,再继续向前寻找下一个空格,直到处理完所有单词。
以下是具体的代码实现:
#include
#define N 100
int main() {
int i = 0, j, cnt;
char ch, end;
char sentence[N];
printf("Enter a sentence: ");
while (1) { // 读取字符直至遇到终止符
ch = getchar();
if (ch == '.' || ch == '!' || ch == '?') break;
sentence[i++] = ch;
}
end = ch; // 存储终止符
--i; // 将索引回退到上一个有效字符
printf("Reversed sentence: ");
while (i >= 0) {
for (cnt = 0; (i >= 0) && (sentence[i] != ' '); i--, cnt++);
for (j = i + 1; cnt > 0; cnt--) printf("%c", sentence[j++]);
if (i > 0) printf(" ");
i--;
}
printf("%c\n", end);
return 0;
}
上述程序执行的结果如图所示:
此为目前我能想到的一种解决方式,如果大家有更好的方法,欢迎交流分享。