内置类型由C++直接定义,体现了大多数计算机硬件本身具备的能力。而标准库定义了一些更高级性质的类型,它们尚未直接实现到计算机硬件中。
库函数基本上都属于命名空间std。
形式如下:
1 using namespace::name;注意:using 声明不应该出现在头文件中。
string表示可变长的字符序列。使用string必须包含string头文件,且声明使用命名空间的std。
1 #include <iostream> 2 using std::string;
注意:当用字符串字面值初始化string时,字符串字面值最后的那个默认结束符不会被送过去,string变量是没有结束符的。
使用=的是拷贝初始化(copy initialization),没有等号的是(direct initialization)。
在执行读取操作时,string对象会自动忽略开头的空白(空格,制表,换行符等)并从第一个真正的字符开始读起,直到遇到下一个空白为止。
上面while语句的条件部分负责在读取时检查流的情况,如果流有效,即没有遇到文件结束符(window用户是ctrl+Z)或非法输入,就一直循环。
每一次Enter都会将缓冲区的所有有效字符逐一输出,用换行间隔。但若想保留文字中的空白符就得用getline函数了。
getline函数的参数:一个输入流,一个string对象。
getline函数的功能:从第一个参数给定的输入流读入内容,直到换行符(包括),然后将其存储到第二个参数给定的对象中(不包括换行符)。
getline函数也会返回流参数,所以也能作为条件使用。
1 while(getline(cin,line)) 2 cout << line << endl;以上语句在遇到文件结束符之前,将一直循环,每一次回车后都将cin流缓冲区的内容按原格式输出。读取一行中的行由用户输入的Enter决定,
即从上一次回车之后到这次回车表示一行,而不是根据屏幕上显示的行(屏幕大小不同)。
字符串也可以和字符字面值以及字符串字面值相加。因为标准库允许把字符串字面值和字符字面值转换成string类型,但是做这种混合运算时,
必须确保+的两侧至少有一个是string类型。
1 s = s1 + 'a' + 'a' + "ab"; // 正确,初看好像第二个+两端都是字符字面值,但表达式是从左往右计算的, // 在第一个加号计算完后,s1+'a'就是string类型了 2 s = 'a' + 'a' + s1 + "ab"; // 错误 3 s = "ab" + "ab" + s1 + "ab"; // 错误 View Code切记:字符串字面值和string类型并不一样!!!
cctype头文件中的函数表
isalnum(c)c为字母或数字时为真isalpha(c)c为字母时为真iscntrl(c)c为控制字符时为真isdigit(c)c为数字时为真isgraph(c)c不是空格但可打印时为真islower(c)c为小写字母时为真isprint(c)c为可打印字符为真(即是空格或具有可视形式)ispunct(c)c是标点符号时为真(即不是控制字符,数字,字母,可打印空白中的一种)isspace(c)c是空白时为真(即是空格,横向制表格,纵向制表格,回车,换行,进纸符的一种)isupper(c)c为大写字母时为真isxdigit(c)c为十六进制数字时为真tolower(c)如果c是大写字母,转换成小写。否则原样返回。toupper(c)如果c是小写字母,转换成大写。否则原样返回。