天天看點

openjudge 計算概論 字元串 2:單詞倒排

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;

}