2. std::string基础用法:
尽管std::string用于代替纯C字符串,但在实现上,它内部记忆字符个数,不依赖于使用零字符指示结尾,因此完全可以存储不可视字符(比如加密或压缩算法处理之后的“字符串”。)所以事实上它统一了字符串和字符组的处理。
std::string 提供了自我内存管理,重载了判断操作符,因此修改、比较操作都变得简单了:
(1)访问、修改单个字符
std::string s = "abc";
s[0] = 'A'
(2)初始化、修改内容、追加
//分配足够内存,初始化内容,一气呵成
std::string s = "d2school";
//往短处改,多么自然而然
s = "school";
//追加字符,也可以使用更自然的append(c)
//不用计算当前容量是否够用,不用操心结束符...
s.push_back('-');
//往长处改,干净,漂亮,自然
s += "D2";
//释放,
//...不需要,会自动释放...或者...
s.clear(); //也可以手动清
(3)内容比较
std::string s1 = "ABC";
std::string s2 = "ABC";
if(s1 == s2)
{
...
}
全套包括大于,小于,大于等于,小于等于,不等于等等。
不过,std::string没有直接提供不区分大小写的比较,没关系,后面还会有第三方扩展提供的强大字符串武器库。
3.内部类型,静态成员数据
(1)string::value_type
对于std::string,该类型是char,对于std::wstring,该类型是wchar_t,即:代表一个字符串中,字符的类型,比如:
std::string s = "ABC";
std::string::value_type c = s[0];
不过,推荐写法还是直接写char即可,通常该类型定义仅用于扩展或自定义字符串。
(2)string::size_type
用于表达字符串的长度数据的类型,相当于size_t,比如:
std::string::size_type len = s.length();
(3)static const size_type std::string::npos
npos是一个定义在std::string类中的静态常量,注意它的类型是前面提到的“string::size_type”。在string内查找字符或子串时,如果“查无结果”时,返回此值,代表“非法位置”,或者,需要字符串的长度时,npos用于表示取到最后一个字符的长度。