描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000
注意本题有多组输入
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:
得到逆序的句子
示例1
输入: I am a boy
输出: boy a am I
示例2
输入: nowcoder
输出: nowcoder
实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fmtStrBuf(char *inBuf, unsigned int maxLen)
{
unsigned int i;
for (i = 0; i < maxLen; i++) {
if ((inBuf[i] == '\r') || (inBuf[i] == '\n')) {
inBuf[i] = '\0';
break;
}
}
}
int main()
{
char *p = NULL;
char inBuf[1000] = {0};
unsigned int i, offset = 0, len = 0;
fgets(inBuf, sizeof(inBuf), stdin);
fmtStrBuf(inBuf, sizeof(inBuf));
len = strlen(inBuf);
// printf("inBuf: %s, len: %u\n", inBuf, len);
do {
// printf("offset: %u\n", offset);
if (inBuf[len - 1 - offset] == ' ') {
// printf("%s, offset: %u\n", &inBuf[len - offset], offset);
printf("%s", &inBuf[len - offset]);
inBuf[len - 1 - offset] = '\0';
printf(" ");
}
offset++;
} while((len - 1) >= offset);
// printf("%s, offset: %u\n", &inBuf[len - offset]);
printf("%s", &inBuf[len - offset]);
return 0;
}
测试
自测输入: I am a boy
预期输出: boy a am I
实际输出:
inBuf: I am a boy, len: 10
offset: 0
offset: 1
offset: 2
offset: 3
boy, offset: 3
offset: 4
offset: 5
a, offset: 5
offset: 6
offset: 7
offset: 8
am, offset: 8
offset: 9
I