首末倒置

问题描述

输入一句英文句子,把句子中的单词倒序输出。
输入

在一行内给出总长度不超过80的字符串,由若干单词和若干空格组成,单词之间由空格分开。句子结尾没有多余的空格。

输出

在一行内输出倒序后的句子。

eg:

输入:

I am your father

输出:

father your am I

思路

读入一行字符串(包括空格)后,从左到右枚举每一个字符,对其进行处理,把每个单词的字母存储到二维数组中,最后按单词输入顺序的逆序输出单词。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
int main()
{
char inStr[90]; //输入的字符串
gets(inStr); //读入字符串
int length = strlen(inStr); //输入字符串的长度
char outStr[90][90]; // 翻转顺序后的单词存放到二维数组中
int r = 0, h = 0; // r为行,h为列
int i;
for(i = 0; i < length; i++) //对输入字符串处理
{
if(inStr[i] != ' ') //如果不是空格,则存放到 outStr[r][h] 中,并令h++
{
outStr[r][h] = inStr[i];
h++;
}
else //如果是空格,说明一个单词结束,行 r 增加一,列 h 重新置0
{
outStr[r][h] = '\0';
r++;
h = 0;
}
}
int j;
for(j = r; j > -1; j--) //倒着输出单词
{
printf("%s", outStr[j]);
if(j > 0) printf(" "); //每个单词结尾加一个空格,最后一个单词不加
}
return 0;
}

point

主要就是想着用二维数组存储处理后的字符串。因为是要求单词逆序,不是连同字母一起逆序。
以及边界处理,要求句子结尾不加空格。