描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足1≤n≤1000
注意本题有多组输入
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:
得到逆序的句子
示例1
输入:
I am a boy
复制
输出:
boy a am I
复制
示例2
输入:
nowcoder
复制
输出:
nowcoder
复制
思路
设置字符串数组存储输入的句子,从最后一个元素开始遍历数组,遇到空格时停止并输出空格前的单词,设置变量j存储此时的位置,由于第一个字母前没有空格,为了能够第一个单词,循环的条件和if语句判断条件设置为i>=-1
代码实现
#include <stdio.h>
#include <string.h>
int main() {
char str[1000] = {0};
gets(str);
int i, j = strlen(str), k, m;
for (i = strlen(str) - 1; i >= -1; i--) {
if ((str[i] == ' ')||(i==-1)) {
for (k = i + 1; k < j; k++)
printf("%c", str[k]);
j = i;
printf(" ");
}
}
return 0;
}
小结
一开始时犯了低级错误,将gets(str)放在了设置int型变量的语句后面导致了没有输出,然后没能输出第一个单词,忽略了第一个单词前没有空格这一特殊情况,将退出循环的条件设置为i>=-1并增设了if语句的判断条件之后顺利输出结果。