(乙)1009 說反話 (20 分)

題目:

給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。

輸入格式:

測試輸入包含一個測試用例,在一行內給出總長度不超過 80 的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用 1 個空格分開,輸入保證句子末尾沒有多餘的空格。

輸出格式:

每個測試用例的輸出佔一行,輸出倒序後的句子。

輸入樣例:

Hello World Here I Come

輸出樣例:

Come I Here World Hello

思路:

這道題的要求是把單詞的位置完全顛倒過來,那麼我們就要把單詞給取出來,然後再把單詞的順序進行反轉。

單詞的分割是空格符號。

我在這一句話的首尾各添加了一個空格符,方便了單詞的分割。

代碼如下:

#include<stdio.h>
#include<string.h>

char a[100];//各處的例句;
char b[100];//單詞轉換後的句子;
char c[100];//爲了方便單詞分割,自己處理後的例句;

int s=0;

void qq(int x,int y)//單詞位置的轉換;
{
    for(int i=y; i<x; i++)
    {
        b[s++]=c[i];
    }
}

int main()
{
    memset(a,0,sizeof a);
    memset(b,0,sizeof b);

    gets(a);//注意輸入;
    int l=strlen(a);
    int i,j;
    a[l]=' ';//尾位置添加了一個空格;
    c[0]=' ';//首位置添加了一個空格;
    
    for(i=0; i<=l; i++)//把例句複製;
        c[i+1]=a[i];
    for(i=l+1; i>=0; i--)//經過預處理,每一個單詞的前後都是空格符;
    {
        if(c[i]==' ')
        {
            for(j=i-1; j>=0; j--)
            {
                if(c[j]==' '||j==0)
                {
                    break;
                }
            }
            qq(i,j);//截取到單詞的具體位置後,把單詞的位置進行轉換;
            i=j+1;
        }
    }
    for(i=1; i<=l+1; i++)//注意輸出時過濾掉第一位的空格符;
        printf("%c",b[i]);
    printf("\n");
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章