2:单词倒排
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
编写程序,读入一段英文(英文中不包含标点),将所有单词的顺序倒排并输出,其中单词以空格分隔。
输入
输入为一个字符串(字符串长度最大为100)
输出
输出为按要求排续后的字符串
样例输入
I am a student
样例输出
student a am I
主要思想:1.一开始以为单词与单词之间只有一个空格,不对,又认为输入多个空格可以输出时只输出一个空格,然后么,就以空格为界分割字符串。
2.第二个正确方法:先翻转整个字符串,遇到第一个单词结尾,倒序输出
有缺版:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 101
int main()
{
char a[N];
int n,i,j=0,h=0,k,count[N] ;
gets(a);
for(i=0; a[i]!='\0'; i++)
if(a[i]==' '&&a[i+1]==' ')//有多个空格时到最后一个空格计数
i++;
else if(a[i]==' ')
count[j++]=i;
for(i=j-1; i>=0; i--) //倒序输出,从最后一个单词输出。
{
k=count[i]+1;//单词位置为空格加一
for(; a[k]!=' '; k++)
{
if(a[k]=='\0')
break;
printf("%c",a[k]);
}
printf(" ");
}
for(i=0; a[i]!=' '; i++)//最后一个单词单独输出,因为计空格数是是从第二个单词记的。
printf("%c",a[i]);
printf("\n");
return 0;
}
正确版
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
char a[500],temp,b[500];//a数组存贮整个句子,b存储某一个单词
int i,len,j,k;
gets(a);
len=strlen(a);
for(i=0;i<len/2;i++)//对整个字符串进行翻转
{
temp=a[i];
a[i]=a[len-1-i];
a[len-1-i]=temp;
}
//printf("\n%s\n",a);
i=0;
j=0;
while(a[i]!='\0')
{
if(a[i]!=' ')
{//扫描句子,遇到非空格字符则存到b数组
b[j]=a[i];
j++;
}
else
{//扫描句子时遇到空格,逆向输出b数组存贮的那个被逆序的单词
for(k=j-1;k>=0;k--)
{
printf("%c",b[k]);
}
printf(" ");//如果有多的空格也可以输出
j=0;
}
i++;
}
for(k=j-1;k>=0;k--)//最后一个单词需要单独处理。因为末尾是终止符不是空格
{
printf("%c",b[k]);
}
return 0;
}