#include <string>
#include <iostream>
#include <boost/algorithm/string.hpp>
int main()
{
std::string str = "abc";
str.push_back('\0'); //string本质上更像一个容器,可插入更多的\0
if (str != "abc") {
//str的长度是4. string类的比较函数考虑了容器的长度。
assert(str.size() == 4);
assert(strlen("abc") == 3);
std::cout << "str is not equal to 'abc'" << std::endl;
}
//把str最后的\0除掉
boost::trim_right_if(str, [](char c) { return c == 0; });
if (str == "abc") {
//str的长度是3.
assert(str.size() == 3);
assert(strlen("abc") == 3);
std::cout << "after trimming ,str is equal to 'abc'" << std::endl;
}
str = "abc";
str.push_back('\0');
str.push_back('d');
//把str最后的\0除掉,这个方法不再奏效!!
boost::trim_right_if(str, [](char c) { return c == 0; });
assert(str.size() != 3);
//使用看起来更笨拙的方法,却是更有效的!!
str = str.c_str();
assert(str.size() == 3);
assert(str == "abc");
//总结:str::string不是我们直觉上的C语言字符串,它有一半血统是char容器,这要小心使用。
return 0;
}
std::string是字符串吗?
最新推荐文章于 2024-09-12 12:47:59 发布