1009. 說反話 (20)
時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
CHEN, Yue
給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。
輸入格式:測試輸入包含一個測試用例,在一行內給出總長度不超過80的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用1個空格分開,輸入保證句子末尾沒有多餘的空格。
輸出格式:每個測試用例的輸出佔一行,輸出倒序後的句子。
輸入樣例:Hello World Here I Come輸出樣例:
Come I Here World Hello
題目分析:我是用最笨的方法:先將字符串放到數組中,在計算出每個單詞所在位置,要排除開頭,中間,結尾的空格符,還要考慮單個單詞的問題。由於沒有考慮周全好,一直出現部分正確的情況。
代碼1:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char arry[100]; scanf("%[^\n]",&arry); int n; n=strlen(arry); int i,m,j; j=0,m=0; int arr[10]; int flag; flag=0; for(i=n-1;i>=0;i--) { if(arry[i]==' '&&flag==0)//先將字符串尾部的空格符刪去 n=n-1; if(arry[i]!=0) flag=1; } for(i=0;i<n;i++) { if(arry[i]==' '&&arry[i+1]!=' ')//計算每個單詞的位置 { m=m+1; arr[j]=i+1; j=j+1; } } if(m==0)//多個單詞的輸出 { m=m+1; arr[0]=0; } int k; if(m>1) { for(k=m-1;k>=0;k--) { i=arr[k]; for(;arry[i]!=' '&&i<n;i++) { printf("%c",arry[i]); } printf(" "); } i=0; for(;arry[i]!=' '&&i<arr[0]-1;i++) { printf("%c",arry[i]); } } else//單個單詞的輸出 { for(i=0;arry[i]!='\0';i++) { printf("%c",arry[i]); } } return 0; }
代碼2:
#include<cstdio>int main(){
int num = 0; //單詞的個數
char ans[80][80];
while(scanf("%s", ans[num]) != EOF){ //一直輸入直到文件末尾
num++; //單詞的個數加 1
}
for(int i = num - 1; i >= 0; i--){ //倒着輸出單詞
printf("%s", ans[i]);
if(i > 0) printf(" ");
}
return 0;
}
代碼3:
#include<cstdio>
#include<cstring>
int main(){
char str[90];
gets(str);
int len = strlen(str), r = 0, h = 0; // r 爲行,h 爲列
char ans[90][90]; // ans[0] ~ ans[r] 存放單詞
for(int i = 0; i < len; i++){
if(str[i] != ' '){ //若不是空格,則存放至 ans[r][h],並令 h++
ans[r][h++] = str[i];
}else{ //若是空格,說明一個單詞結束,行 r 增加 1,列 h 恢復至 0
ans[r][h] = '\0'; //末尾是結束符 \0
r++;
h = 0;
}
}
for(int i = r; i >= 0; i--){//倒着輸出單詞即可
printf("%s", ans[i]);
if(i > 0) printf(" ");
}
return 0;
}