题目描述
输入一句话,然后将这个字符串以单词为单位逆转输出。例如,将输入的“Alice call Jack
”转换为“Jack call Alice
”。
代码实现
#include <iostream>
#include <string>
using namespace std;
int main() {
int i = 0;
string line;
cout << "请输入一句话:" << endl;
getline(cin, line);
// 句子中的所有单词都逆转
while (line[i]) {
// 跳过前面的空格
while (line[i] == ' ') i++;
int j = i;
// 该循环结束过后,j是这个单词的最后一个字母的下一个位置。即是这个单词后面的第一个空格
while (line[j] != ' ' && line[j]) j++;
// 逆转这个单词
for (int k1 = i, k2 = j - 1; k1 < k2; k1++, k2--) {
char tmp = line[k1];
line[k1] = line[k2];
line[k2] = tmp;
}
i = j;
}
// 逆转整个句子
for (int k1 = 0, k2 = i - 1; k1 < k2; ++k1, --k2) {
char tmp = line[k1];
line[k1] = line[k2];
line[k2] = tmp;
}
cout << line << endl;
}
代码解释
-
读取输入:使用
getline
从标准输入读取一整行字符串。 -
逆转每个单词:
- 通过两个
while
循环找到每个单词的开始和结束位置。 - 使用双指针方法交换单词内部的字符,使其逆序。
- 通过两个
-
逆转整个句子:在所有单词都逆转之后,再对整个字符串进行一次逆转。这会将之前逆转的单词重新调整为正常顺序,同时实现整体句子的单词顺序逆转。
示例输出
输入:“Alice call Jack
”
输出:“Jack call Alice
”
通过这种方式,我们成功实现了将句子中的单词逆转输出。如果你有任何问题或者更好的方法,欢迎在评论区留言讨论。