1、追求性能,底层编程的时候,用char。追求方便安全,应用编程的时候,用string。
2、string相当于char的类封装。尽量使用string的成员函数,不要使用外部STL算法函数。
3、string::npos相当于string的末尾标记,类似于char的’\0’,类似于STL的coll.end()。注意返回值最好是string::size_type,绝对不可以用unsigned int,因为npos=-1。int也最好不要用了。
4、下面的写法正确,但是效率不高:
string c = a + b;
原因是会产生临时数据。高效率的写法是:
string c = a;
c += b;
5、如果要获得整句包含空格的字符串,建议用getline而不是cin,cin会跳过空格。要用cin,这样干:cin >> std::skipws>> string;
getline(std::cin, string);
getline(std::cin, string , ‘:’);//遇到‘:’号就停止。注意是单字符!!
6、与众不同的函数
函数名 | 作用 |
replace | 替换字符。与STL的replace不同,这里是给定区间替换 |
c_str | 返回一个const char*的字符串,如果想进行操作,就请复制出来。推荐用strcpy |
data | 类似于c_str(),但是末尾不会自动添加’\0’ |
substr | 返回子字符串 |
find | 搜寻第一个指定字符 |
rfind | 搜寻最后一个指定字符 |
find_first_of | 第一个与给定的多个字符中任何一个相同的字符。这个很有用。比如搜寻一些终结符号: string delim(“ \t\0:”); s.find_first_of(ctr, delim);遇到delim中任何一个符号就返回 |
find_last_of | 最后一个与给定的多个字符中任何一个相同的字符 |
find_first_not_of | 第一个与给定的多个字符中任何一个都不同的字符 |
find_last_not_of | 最后一个与给定的多个字符中任何一个都不同的字符 |
7、string没有提供正则表达式和文本处理。文本处理可以使用string算法自己编写程序。正则表达式C++tr1/C++11标准已经支持,需要包含#include<regex>
8、string对待’\0’与Char不同,这点要注意。
a) string(“nico”) “nico”
b) string(“nico”, 5) “nico\0”
c) string(5, ‘\0’) “\0\0\0\0\0”
9、string可以看做vector<char>或者vector<wchar>。这样很多STL算法可以用。string的迭代器是random-access随机迭代器。有些STL实作在实现string时使用了引用计数技术使得相关操作很快。
11、有关非英文编码,请看后面的国际化一章。