1009 说反话 (20point(s))
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
大致思路:
遍历输入的字符串,一一记录下首位(0)、所有空格位、末位(存储'\0')的下标。
从后向前一一将记录的下标之间的内容copy,然后输出。
主要注意:
1、下标之间的内容对应下标要正确
2、最后一个输出,即原来的一个单词,要特殊处理,最后不加空格而是换行符
代码如下:
//
// Created by LittleCat on 2020/2/8.
//
#include <cstring>
#include <iostream>
using namespace std;
#define N 100
void copy(char s[], int start, int end, char str[]) {
int j = 0;
for (int i = start; i <= end; i++)
str[j++] = s[i];
str[j] = '\0';
}
int main() {
char s[N];
cin.getline(s, N);
/* 记录所有空格和最末端的位置 */
int j = 0, index[N] = {0};
for (int i = 0; i <= strlen(s); i++)
if (s[i] == ' ' || s[i] == '\0')
index[++j] = i;
/* 一一打印 */
char str[N];
for (int i = j - 1; i > 0; i--) {
copy(s, index[i] + 1, index[i + 1] - 1, str);
printf("%s ", str);
}
copy(s, index[0], index[1] - 1, str);
printf("%s\n", str);
}
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~