1009. 说反话 (20)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

思路:C语言写的,回头再用Java重写一次,由于没有特殊的集成函数只能使用char[]来操作,主要思想是记录分隔符在字符数组str[]中的位置,将其Index记录在int[cnt++] arr中,计数变量cnt在for循环中可以实现每个单词的打印输出;
需要注意的是:在仅仅有一个单词的时候,要使arr[0] = str.length;
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     int arr[80] = {0};
 7     char str[80];
 8     gets(str);
 9     int length = strlen(str);
10     int cnt = 0;
11     for(int i=0; i<length; i++)//记下字符串中空格的原始下标 
12     {
13         if(str[i]== ' ')
14             arr[cnt++] = i; 
15     }
16     if(cnt == 0) arr[0] = length;
17 //    for(int i=0; i<cnt; i++)
18 //    printf("%d ",arr[i]);
19 
20     int endIndex = length;
21     for(int i=cnt-1; i>=0; i--)
22     {
23         for(int j=arr[i]+1; j<endIndex; j++)
24         {
25             if(j!=endIndex-1)
26             printf("%c",str[j]);
27             else
28             printf("%c ",str[j]); 
29         }
30         endIndex = arr[i];
31     }
32     for(int i=0; i<arr[0]; i++)
33         printf("%c",str[i]);
34     
35     return 0;
36  } 
原文地址:https://www.cnblogs.com/valar/p/6151794.html