1. string 中的size() 返回的是size_type类型
size_type 是一个配套类型,这样库类型的使用就会与机器无关了,可以保证存储足够大能够存储任意长度的string对象的长度,不要把size()赋值给一个 int 类型。
size_type是一个unsigned型的。它能存储的值是int的两倍。
16位的机器int 最大只能表示为32767
所以安全的表示size() 是 string::size_type类型。
2. string可通过[ ]来访问string对象的单个字符。下标为size_type类型 注意不要溢出导致程序错误。
3. cctype头文件中定义了好多string单个字符(其他的char)操作的函数
bool isalnum(a) a 是否字母或者数字
bool isalpha(a) a 是否字母
bool isblank(a) a 是否字符为空
bool iscntrl(a) a 是否控制符
bool isdigit(a) a 是否数字
bool isgraph(a) a 是否空格 但可打印
bool islower(a) a 是否小写的字母
bool isprint(a) a 是否可打印的字符
bool ispunct(a) a 是否标点符号
bool isspace(a) a 是否空白字符
bool isupper(a) a是否大写字母。大写返回ture
bool isxdigit(a) a 是否16进制的数
tolower(a) a是大写的返回小写的,否则直接返回a
toupper(a) a是小写字母,返回大写字母,否则直接返回a
4. 初始化string有很多的构造函数,但是如果采用如这种初始化会导致不可预知的错误
char no_null[ ] = { ‘H’ ,‘Q’};
string s(no_null);
std::cout<< "s" <<s <<endl;
原因是: 调用次形式的初始化,其参数必须是以空字符结束的数组,将不包含null的数组传递给此构造函数将导致编译器无法检测的错误,在运行时发生什么状况未定义。?????????????????????
改s(no_null, 2); 后面的参数一定要小于no_null的长度。
或者 改 char a[ ] = "asdfasdfasdf";
string s1(a); //输出就是正常的