实现句子中所有单词词序的逆转「腾讯笔试题目」

题目描述

输入一句话,然后将这个字符串以单词为单位逆转输出。例如,将输入的“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;
}

代码解释

  1. 读取输入:使用getline从标准输入读取一整行字符串。

  2. 逆转每个单词

    • 通过两个while循环找到每个单词的开始和结束位置。
    • 使用双指针方法交换单词内部的字符,使其逆序。
  3. 逆转整个句子:在所有单词都逆转之后,再对整个字符串进行一次逆转。这会将之前逆转的单词重新调整为正常顺序,同时实现整体句子的单词顺序逆转。

示例输出

输入:“Alice call Jack
输出:“Jack call Alice

通过这种方式,我们成功实现了将句子中的单词逆转输出。如果你有任何问题或者更好的方法,欢迎在评论区留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值