You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++按引用传参实现移除字符串空格的代码问题咨询

问题分析与解决

问题根源

你代码里的RemoveSpaces函数虽然用了引用传参,但完全没修改传入的userString变量——它只是把非空格字符逐个打印出来,原字符串根本没被改动。主函数最后输出的还是最初输入的userInputString,所以自然会保留空格。

正确实现代码

要实现要求的功能,需要在函数里真正修改引用指向的原字符串,这里提供两种常见写法:

写法1:构建新字符串后覆盖原变量

这种方式逻辑清晰,容易理解:

#include <iostream>
#include <string>
using namespace std;

void RemoveSpaces(string &userString) {
    string noSpaceStr;
    for (unsigned int i = 0; i < userString.size(); i++) {
        if (userString.at(i) != ' ') {
            noSpaceStr += userString.at(i);
        }
    }
    // 直接修改引用指向的原字符串
    userString = noSpaceStr;
}

int main() {
    string userInputString;
    getline(cin, userInputString);
    RemoveSpaces(userInputString);
    cout << userInputString << endl;
    return 0;
}

写法2:原地删除空格(更高效)

直接在原字符串上操作,不需要额外内存:

#include <iostream>
#include <string>
using namespace std;

void RemoveSpaces(string &userString) {
    int index = 0;
    for (unsigned int i = 0; i < userString.size(); i++) {
        if (userString[i] != ' ') {
            userString[index++] = userString[i];
        }
    }
    // 截断字符串到有效长度
    userString.resize(index);
}

int main() {
    string userInputString;
    getline(cin, userInputString);
    RemoveSpaces(userInputString);
    cout << userInputString << endl;
    return 0;
}

关于引用传参的关键说明

引用传参的核心是:函数里操作的就是主函数中原来的变量,而不是它的副本。但这并不意味着变量会自动更新——你必须主动对这个引用变量进行赋值、修改等操作,才能让原变量的值改变。你之前的代码只是打印字符,完全没碰userString的内容,所以原字符串当然不会变。

内容的提问来源于stack exchange,提问作者jjjzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:00:58