删除字符串中所有空格可用多种方法:①std::remove与erase结合,高效删除普通空格;②std::remove_if配合isspace,清除各类空白字符;③手动遍历构建新字符串,逻辑清晰可定制;④stringstream分词重组,自动跳过空白。根据需求选择合适方式。

在C++中删除字符串中的所有空格是一个常见需求,比如处理用户输入、格式化文本或准备数据时。有多种方式可以实现这一功能,下面介绍几种实用且高效的方法。
使用标准库算法 remove 和 erase(推荐)
这是最简洁且高效的方式,利用 std::remove 将空格移动到字符串末尾,再用 erase 删除它们。
#include#include #include std::string str = " hello world c++ "; str.erase(std::remove(str.begin(), str.end(), ' '), str.end()); std::cout << str << std::endl; // 输出: helloworldc++
这种方式速度快,代码清晰,适用于只删除普通空格的情况。
使用 remove_if 删除多种空白字符
如果想同时删除制表符(\t)、换行符(\n)等其他空白字符,可以用 std::remove_if 配合 std::isspace。
立即学习“C++免费学习笔记(深入)”;
#include#include #include std::string str = " hello \t\n world "; str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());
注意:::isspace 是 C 风格函数,需包含 cctype 头文件。它能识别所有空白字符,比只删空格更全面。
手动遍历构建新字符串
如果你希望逻辑更直观,或需要自定义过滤条件,可以手动遍历并拼接非空格字符。
std::string str = " hello world ";
std::string result;
result.reserve(str.length()); // 预分配空间提升性能
for (char c : str) {
if (c != ' ') {
result += c;
}
}
str = result;
这种方法易于理解和修改,比如改成跳过多个连续空格或保留单词间单个空格。
使用 stringstream 进行分词重组
如果你想按单词提取再合并,可以借助 std::stringstream,自动跳过空白。
#includestd::string str = " hello world c++ "; std::stringstream ss(str); std::string word, result; while (ss >> word) { result += word; }
这个方法天然忽略所有空白字符,适合用于“压缩”字符串为无空格形式。
基本上就这些常用方式。根据需求选择:追求简洁用 remove+erase;处理多类空白用 remove_if;需要控制逻辑用手动遍历;利用流特性可用 stringstream。不复杂但容易忽略细节,比如是否包含制表符、性能要求等。











