OpenJudge计算概论-单词倒排【把句子内单词的顺序翻转】

/*==================================================
单词倒排
总时间限制: 1000ms 内存限制: 65536kB
描述
编写程序,读入一段英文(英文中不包含标点),
将所有单词的顺序倒排并输出,其中单词以空格分隔。

输入
输入为一个字符串(字符串长度最大为100)
输出
输出为按要求排续后的字符串
样例输入
I am a student
样例输出
student a am I

注:这个代码是覃宗华写的。 
====================================================*/
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int main()
 6 {
 7     char a[500] = {0};
 8     int n, i, j;
 9     freopen("5.in","r",stdin);
10     while(gets(a))
11     {
12         n = strlen(a);
13         for(i=n-1;i>=0;i--)
14         {
15             if(a[i]==' ')
16             {
17                 for(j=i+1;a[j]!=' '&&a[j]!='';j++)
18                     cout<< a[j];
19                 cout<<" ";
20             }
21         }
22         for(i=0;a[i]!=' '&&a[i]!='';i++)
23             cout<<a[i];
24         cout << endl;
25     }
26     return 0;
27 }
 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char a[500],temp,b[100];//a数组存贮整个句子,b存储某一个单词 
 6     int i,len,j,k;
 7     gets(a);
 8     len=strlen(a);
 9     for(i=0;i<len/2;i++)//对整个字符串进行翻转 
10     {
11         temp=a[i];
12         a[i]=a[len-1-i];
13         a[len-1-i]=temp;
14     }
15     //printf("
%s
",a);
16     i=0;
17     j=0;
18     while(a[i]!='')
19     {
20         if(a[i]!=' ')
21         {//扫描句子,遇到非空格字符则存到b数组 
22             b[j]=a[i];
23             j++;
24         }
25         else
26         {//扫描句子时遇到空格,逆向输出b数组存贮的那个被逆序的单词 
27             for(k=j-1;k>=0;k--)
28             {
29                 printf("%c",b[k]);
30             }
31             printf(" ");
32             j=0;
33         }
34         i++;
35     }/**/
36     for(k=j-1;k>=0;k--)//最后一个单词需要单独处理 
37     {
38         printf("%c",b[k]);
39     }
40     printf("
");
41     return 0;
42 }
原文地址:https://www.cnblogs.com/huashanqingzhu/p/3500465.html