在C++字符串处理场景中,去除字符串前后的空格是高频需求,除了手动遍历字符判断的方式,还可以利用std::string类自带的find_first_not_of和find_last_not_of方法快速实现,这种方式代码更简洁,也更符合标准库的使用规范。

相关方法说明
要实现去除前后空格,首先需要了解两个核心方法的含义:
- find_first_not_of:从字符串起始位置开始查找,返回第一个不在指定字符集合中的字符的位置索引,如果没找到则返回std::string::npos。
- find_last_not_of:从字符串末尾位置开始向前查找,返回最后一个不在指定字符集合中的字符的位置索引,如果没找到则返回std::string::npos。
这里的指定字符集合我们可以传入空格字符,这样就能找到前后第一个非空格字符的位置,进而截取有效子串。
基础实现代码
下面是一个完整的去除字符串前后空格的实现示例:
#include <iostream>
#include <string>
// 去除字符串前后的空格
std::string trim_string(const std::string& str) {
// 定义空格字符集合,这里只包含普通空格,可根据需求扩展
const char* whitespace = " ";
// 找到第一个非空格字符的位置
size_t start = str.find_first_not_of(whitespace);
// 如果没找到,说明字符串全是空格或者为空,直接返回空字符串
if (start == std::string::npos) {
return "";
}
// 找到最后一个非空格字符的位置
size_t end = str.find_last_not_of(whitespace);
// 截取[start, end]区间的子串,注意substr第二个参数是长度
return str.substr(start, end - start + 1);
}
int main() {
// 测试用例1:前后都有空格
std::string test1 = " hello world ";
std::cout << "原始字符串: [" << test1 << "]" << std::endl;
std::cout << "去除后字符串: [" << trim_string(test1) << "]" << std::endl;
// 测试用例2:只有前空格
std::string test2 = " test";
std::cout << "原始字符串: [" << test2 << "]" << std::endl;
std::cout << "去除后字符串: [" << trim_string(test2) << "]" << std::endl;
// 测试用例3:只有后空格
std::string test3 = "demo ";
std::cout << "原始字符串: [" << test3 << "]" << std::endl;
std::cout << "去除后字符串: [" << trim_string(test3) << "]" << std::endl;
// 测试用例4:全空格字符串
std::string test4 = " ";
std::cout << "原始字符串: [" << test4 << "]" << std::endl;
std::cout << "去除后字符串: [" << trim_string(test4) << "]" << std::endl;
// 测试用例5:空字符串
std::string test5 = "";
std::cout << "原始字符串: [" << test5 << "]" << std::endl;
std::cout << "去除后字符串: [" << trim_string(test5) << "]" << std::endl;
return 0;
}
代码逻辑解析
上述实现的核心逻辑可以分为三步:
- 首先调用
find_first_not_of方法,传入空格字符,找到字符串中第一个不是空格的字符位置,如果返回std::string::npos,说明整个字符串都是空格或者为空,直接返回空字符串即可。 - 然后调用
find_last_not_of方法,同样传入空格字符,找到字符串中最后一个不是空格的字符位置。 - 最后使用
substr方法截取从start位置开始,长度为end - start + 1的子串,这个子串就是去除前后空格后的有效内容。
扩展说明
如果需要去除的不仅是普通空格,还包括制表符、换行符等空白字符,可以修改whitespace的定义:
// 包含空格、制表符、换行符、回车符等常见空白字符 const char* whitespace = " tnrfv";
这样就能适配更多场景下的空白字符去除需求,不需要修改其他逻辑,只需要调整传入find_first_not_of和find_last_not_of的字符集合即可。
C++stringfind_first_not_of去除前后空格修改时间:2026-07-09 02:33:23