C++ primer三章二节标准库类型string

    科技2022-07-15  119

    标准库类型string

    标准库类型string表示可变长的字符序列,使用#include<string>引入头文件,string定义在命名空间std中。

    定义和初始化string对象

    如何初始化类的对象是由类的本身决定的,类可以定义很多初始化对象的方式,但是这些方式之间必须有所不同,不同体现在初始值的数量、类型。常用的初始化的例子 string s1; //空字符串 string s2(s1); //将s1作为s2的初始值 string s2 = s1; //和上面的一致 string s3("Value"); //给s3赋value值 string s3 = "value"; //和上面一致 string s4(n,'c'); //s4 = n个c

    直接初始化和拷贝初始化

    = 拷贝初始化,将等号右侧的初始值拷贝到新创建的对象中去不使用等号,则执行的是直接初始化

    string对象上的操作

    一个类除了要规定初始化其对象的方式外,还要定义对象上所能执行的操作。类既可以定义通过函数名字调用的操作,还可以定义<<、+等各种运算符在此类的对象上的新的含义。 os<<s   将s写到输出流os中,返回sis>>s    从is中读取字符串赋值给s,字符串以空白分割,返回isgetline(is,s)  从is中读取一行赋值给s,返回iss.empty() s为空返回true。否则返回falses.size()   返回s中的字符的个数s[n]      返回s中第n个字符的引用,位置n从0开始计算s1+s2  返回字符串s1和s2拼接的效果s1 = s2  使用s2的副本代替s1中原来的字符s1 == s2  如果s1和s2的字符完全一致,则他们相等s1 != s2<、<=、>、>=  按照字典顺序比较大小,且大小写比较敏感

    读写string对象

    读取操作的时候,string对象会自动忽略开头的空白(空格符、换行符、指标符),并从第一个真正的字符开始读起,直到遇见下一处的空白为止。例如输入“     Hello       ”,接收的却是“Hello”,输出的结果中没有空格。多个输入或者输出可以连写在一起。

    读写未知数量的string对象

    int main(int argc,char **argv){ string word; while(cin >> word){ cout << word << endl; } return 0; }

    使用getline读取一行

    保留输入的时候的空白符号,使用getline()替代先前的>>运算符号getline只要一遇到换行符号就会结束读取操作并且返回结果,即使一开始输入的就是换行符号,那么返回的就是空字符串。 int main(int argc,char **argv){ string word; while(getline(cin,word)){ cout << word << endl; } return 0; }

    string的size操作

    size函数返回的是一个string::size_type类型的值,这是一个无符号类型的数值,而且可以存放下任何string对象的大小。在C++11中允许使用auto或者decltype来判断变量的类型。如果表达式已经有了size()函数既不要使用int了,可以避免混用int和unsigned可能带来的问题。

    比较string对象

    ==和!=分别校验两个对象相等还是不相等。相等是指两个对象的长度和所蕴含的字符完全一致。< <= >= > 和先前的认知是一致的,比较区分大小写,按照字典序来比如果两个字符一短一长,短的所有位数和长的先前位数是一致的,那么小的小于长的如果在某些位置上面元素不一致,以第一对相异字符比较结果作为整体比较结果。

    两个string对象相加

    这个 + 符号和Java是一样的,默认是字符串的拼接如果将string对象、字符字面值和字符串字面值混在一起使用,需要保障每一个加法运算符 + 的两侧的运算符对象至少有一个是string。 string s1 = "Hello"; string s2 = "World"; string s3 = s1 + "," + s2 + '\n'; string s4 = s1 + ","; string s5 = "Hello" + "\n";//错误,两个运算对象都不是string string s6 = s1 + "," + "World"; string s7 = "Hello " + "," + s2;//错误,不能把字面值直接相加

    处理string对象中的字符

    引入cctype头文件就可以引入一些标准库函数来处理字符

    isalnum(c)c是字母或者数字为真isalpha(c)c是字母为真iscntrl(c)c是控制字符为真isdigit(c)c是数字为真isgraph(c)c不是空格但是可以打印的时候为真islower(c)c是小写字母为真isprint(c)c可打印为真(c是空格或者c具有可见的形式)ispunct(c)c标点符号为真isspace(c)c空白为真issupper(c)c大写字母为真isxdigit(c)c是十六进制为真tolower(c)若c大写,则转化为小写字母toupper(c)若c小写,则转化为大写字母 C++在兼容C语言的库,去掉.h,在头文件的名字前面增加字母c即可。

    使用for来处理每一个字符

    将每一个字符改成小写 int main(int argc,char **argv){ string s = "HELLO WORLD!!!"; for(auto &c : s) { //对于s中的每一个字符,其中&表示引用 c = tolower(c); //c是一个引用,因此赋值语句将会改变c的数值 } cout << s << endl; return 0; }  处理特定位置的字符:1,使用下标;2,使用迭代器下标运算符号[] 接收的输入值是string::size_type类型的数值,这个参数表示的是访问字符的位置,返回的是该位置上字符的引用。字符对象的下标从0开始计算,最大的下标是s[s.size()-1]

    补充知识

    decltype关键字用于查询表达式的类型详细的参考链接地址 https://blog.csdn.net/caoshangpa/article/details/79129258

     

     

     

    Processed: 0.010, SQL: 8