句子逆序

句子逆序(C语言)

题目

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a 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
#include<stdio.h>
#include<ctype.h>
void flashback(char a[], int j,int p); //倒序函数
int main(void)
{
char a[10000];
int j,i,k, end;
char temp;
gets(a);
end = strlen(a) - 1;
flashback(a,0, end); //句子倒序

for (i = 0; i < end; i++)
if (!isspace(a[i])&&i<end) { //判断单词的开头,记录开始位置j
j = i++;
while (!isspace(a[i])&&i<end)
i++; //找到单词的结尾
if (i < end) k = --i; //记录结尾位置k
else k = end;
flashback(a, j, k); //单词倒序
}
puts(a);
}

void flashback(char a[],int j ,int p) //三个参数 第一个为数组的指针,第二个倒序的开始 位置,第三个为倒序的结束位置
{
int i;
char temp;
for (i = j; i <p ; i++,p--)
{
temp = a[p];
a[p] = a[i];
a[i] = temp;
}
}

反思

重点在于如何判断单词的开头和结尾,并且一定要注意最后单词会出现什么情况。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 lsengard
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信