1. 程式人生 > >7-32 說反話-加強版

7-32 說反話-加強版

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

輸入格式:

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

輸出格式:

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

輸入樣例:

Hello World   Here I Come

輸出樣例:

Come I Here World Hello

這個題通過率蠻低的,基本思路是不難的,不過是逆序輸出。但是需要注意一些特殊情況,比如單詞之間多個空格,開頭有空格,結尾有空格等等。程式碼如下:

#include<iostream>
#include<string>
#include<cstring>

using namespace std;

int main(){
	char str[500001];
	int length, i, j, mark, flag;
	cin.getline(str, 500001);
	length = strlen(str);
	mark = length - 1;
	for(i = length - 1; i >= 0; i--){
		if(str[i] == ' ' && str[i + 1] != ' '){
			flag = 0;
			for(j = i + 1; j <= mark; j++)
				cout << str[j];		
			//判斷是不是最後一個單詞 
			for(j = i; j >= 0; j--){
				if(str[j] != ' '){
					flag = 1;
					break;
				}
			}
			if(flag && i != length - 1) cout << ' ';
		}else if(str[i] != ' ' && str[i + 1] == ' ')
			mark = i;
		if(i == 0 && str[0] != ' '){
			for(j = 0; j <= mark; j++)
				cout << str[j];
		}
	}
}