菜鳥的PAT訓練之旅-9

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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章