【PAT乙级】1009 说反话 (20 分) C语言实现
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
代码实现:
- 解法一:
#include <stdio.h>
#include <string.h>
int main() {
char arr[81], temp[81], target[81];
if (scanf("%[^\n]", arr)) {
int len = strlen(arr);
int j = 0, k = 0;
for (int i = len - 1; i >= 0; i--) {
// 先将字符倒着放到 临时数组 中
if (arr[i] != ' ') {
temp[k] = arr[i];
k++;
}
// 如果遇到空格,就将 临时数组 放置到目标数组中
if (arr[i] == ' ' || i == 0) {
for (k = k - 1; k >= 0; k--) {
target[j] = temp[k];
j++;
}
k = 0;
}
// 遇到空格就往 目标数组 中添加空格
if (arr[i] == ' ') {
target[j] = ' ';
j++;
}
// 在数组最后添加 \0 用来表示字符串的结束
if (i == 0) {
target[j] = '\0';
}
}
// 打印输出
printf("%s\n", target);
}
return 0;
}
- 解法二:
#include <stdio.h>
#include <string.h>
int main() {
char arr[81];
if (scanf("%[^\n]", arr)) {
for (int i = strlen(arr) - 1; i >= 0; i--) {
// 当遇到空格,就输出后面的字符串
if (arr[i] == ' ') {
printf("%s", &arr[i + 1]);
printf("%c", arr[i]);
arr[i] = '\0';
}
// 如果 i==0 的时候是非空格的,就输出,因为不会有更靠前的数组下标了
if (i == 0) {
printf("%s", arr);
}
}
printf("\n");
}
return 0;
}