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;
}