程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 輸入一個英文句子,翻轉句子中單詞的順序,單詞內字符順序不變

輸入一個英文句子,翻轉句子中單詞的順序,單詞內字符順序不變

編輯:C++入門知識

[cpp]

<p>題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。 
為簡單起見,標點符號和普通字母一樣處理。 
例如輸入“I am a student.”,則輸出“student. a am I”。</p><p>處理方法是首先將整個句子翻轉,然後再將其中的每個單詞翻轉。</p><p>代碼如下:</p><p> </p> 
[cpp]

#include <iostream> 
 
using namespace std; 
 
void myReverse(char*, char*); 
char * senReverse(char*); 
int main() 

    char sen[]="hello, I am a student!"; 
    char *result=senReverse(sen); 
    cout << result << endl; 
    return 0; 

void myReverse(char *start, char *end) 

    char temp; 
    while(start<end) 
    { 
        temp=*start; 
        *start=*end; 
        *end=temp; 
        start++; 
        end--; 
    } 

char * senReverse(char *sen) 

    char *start=sen, *end=sen+strlen(sen)-1; 
    myReverse(start, end);  //先反轉整個句子 
     
[cpp]
釋部分是另外一種實現,只不過看起來有些繁瑣
int loc;  //記錄每個單詞的長度
for(start=sen,end=start;(*end)!='\0';start+=loc)
{
    loc=0;
    while((*end)!=' '&&(*end)!='\0'){end++, loc++;}
    end--;
    myReverse(start, end);
    end+=2;
    loc++;
}
*/ 
end=start; 
while(*start!='\0') 

    if(*end==' '||*end=='\0') 
    { 
        myReverse(start, --end); 
        if(*end=='\0') 
            break; 
        end+=2; 
        start=end; 
    } 
    else 
        ++end; 

 
return sen; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved