題目:1009 說反話 (20 分)
給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。
輸入格式:
測試輸入包含一個測試用例,在一行內給出總長度不超過 80 的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用 1 個空格分開,輸入保證句子末尾沒有多余的空格。
輸出格式:
每個測試用例的輸出占一行,輸出倒序后的句子。
輸入樣例:
Hello World Here I Come
輸出樣例:
Come I Here World Hello
首先給出我最初的想法實現,提交后只是部分答案正確,至於為什么有部分答案錯誤實在沒弄清楚,如果你可以幫我看出來,請在評論區指出,謝謝。
#include <iostream>
#include<string>
using namespace std;
int main()
{
char str[81]=" ";
cin.get(str, 81);
int i,j;
i = 80;
while (str[i] == '\0') {
i--;
}
j = i;
i++;
for (j;j > 0;j--) {
if (str[j] == ' ') {
int k = j;
k++;
for (k;k <= i;k++) {
cout << str[k];
}
i = j;
}
}
for (j;j < i;j++) {
cout << str[j];
}
return 0;
}
本題的解題思路:
我們首先使用一個字符數組來接收含有空格的字符串,采用cin.get(字符數組名,接收字符數目)
再使用一個二維數組來對單詞進行分隔,每一行代表一個單詞,列號代表單詞的輸入順序。
最后按列號逆序輸出即可。
#include <iostream>
#include<string>
using namespace std;
int main()
{
char str[90][90];
char in[90]=" ";
int h = 0,l = 0;
cin.get(in, 90);
for (int i = 0;i < 90;i++) {
if (in[i] != ' ') {
str[h][l++] = in[i];
}
else {
str[h][l] = '\0';
h++;
l = 0;
}
}int num = 0;
while (h >= 0) {
if (num > 0) {
cout << " ";
}
num++;
cout << str[h];
h--;
}
return 0;
}