7-32 說反話-加強版(20 分)


7-32

7-32 說反話-加強版(20 分)

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

輸入格式:

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

輸出格式:

每個測試用例的輸出占一行,輸出倒序后的句子,並且保證單詞間只有1個空格。

輸入樣例:

Hello World   Here I Come

輸出樣例:

Come I Here World Hello
#include<stdio.h>//標准c,沒有用c++的string,這樣首先讀取字符串就是個問題了 
#define MAX 500000
//先處理字符串,刪除多余的空格,形成新字符串 
//Hello World   Here I Come
int main ()
{
    char s;//指單獨一個字符 
    char t[MAX];//創建一個字符數組 
    int i = 0, count = 0, flag = 0;
    while ((s=getchar()) != '\n') {//getchar每次從標准輸入讀入一個字符 ,標准輸入會有'\n'??? 
        if (s != ' ') {
            flag = 1; //標記遇到單詞 
            t[i++] = s;
            count = 0;
        } else if (count > 0) {
            continue;//contiue跳過
        } else if (flag) {
            t[i++] = s; //只有之前遇到單詞的情況下碰到空格才把這個空格寫入目標字符串 
            count ++;//這里換成count=1也是完全一樣 
        }
    } //刪除多余的空格,將目標字符串放入 t 中 
    //這里的count起了什么作用呢? 
    //如遇到 Hello,都存入t中,遇到第一個空格,此時count=0,flag=1,把空格存入t,count=1
	//World后面的空格 ,第二個空格,遇到空格繼續讀下一個字符即,continue,起一個跳過作用 
    //開頭就是空格咋辦?啥也不操作 
    
    
    count = 0;
    int j;
    for (i-=1; i>=0; i--) {//i-=1.i=i-1,最后一個標號為i里面是沒存東西的 
        if (t[i] != ' ') {
            count ++; // 這里的 count 統計的是一個單詞里字母的個數 
        } else if (t[i]==' ' && count > 0) {
            for (j=i+1; j<=i+count; j++) {
                printf("%c", t[j]);
            } //遇到空格就輸出單詞 
            printf(" ");
            count = 0;
        }
    } // 還剩最后一個單詞沒輸出,因為最后一個單詞可能前方無空格 ,只完成了count++,但是沒有遇到 空格,那么邏輯是一樣的 
    for (j=i+1; j<=i+count; j++) {
        printf("%c", t[j]);
    } //i,j的變量作用范圍非常的有用
	//這么看來字符數組其實非常的方便,不必非要使用c++的string類 ,continue用來跳過也是極好的 

    return 0; 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM