1. 程式人生 > >字串操作,翻轉句子中單詞的順序--經典面試題兩種解法

字串操作,翻轉句子中單詞的順序--經典面試題兩種解法

題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。 句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。

例如輸入“I am a student.”,則輸出“student. a am I”。

方法一:C語言字串經典操作,判別單個字元是否為空格來擷取單詞。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=10000;
int flag=0,first,last;
char line[maxn];
void out(char line[],int first,int last){
    if(flag++) printf(" ");
    for(int i=first;i<=last;i++) printf("%c",line[i]);
}
int main(){
    while(cin.getline(line,maxn)){
        flag=0,first=last=strlen(line)-1;
        while(first>0){
            if(line[first]==' '){
                out(line,first+1,last);
                first=last=first-1;
            }else{
                first--;
            }
        }
        out(line,first,last);
        printf("\n");
    }
}

方法二:將讀取的一行內容存放到string中,將string作為流進行讀寫。
#include<iostream>
#include<string>//為了string類
#include<sstream>//為了stringstream
using namespace std;
int main(){
    string line;
    char s[100][100];
    while(getline(cin,line)){//注意getline的用法,讀取一行,不用指定大小
        int flag=0,i=0;
        stringstream ss(line);//將讀取的string型別轉換成流
        while(ss>>s[i]){
            i++;
        }
        for(int j=i-1;j>=0;j--){
            if(flag++) cout<<' ';
            cout<<s[j];
        }
        cout<<endl;
    }
}