1.定义和初始化string对象
string s1; //默认初始化,s1是一个空串 string s2(s1); //s2是s1的副本 string s2=s1; //等价于s2(s1) string s3("value"); //s3是字面值"value"的副本,除了字面值最后的空字符外 string s3="value"; //等价于s3("value") string s4(n,'c'); //把s4初始化为由连续n个字符c组成的串
直接初始化和拷贝初始化
拷贝初始化:用等号(=)初始化一个变量
直接初始化:不使用等号,初始化一个变量
string s5="hiya"; //拷贝初始化 string s6("hiya"); //直接初始化 string s7(10,'c'); //直接初始化,s7的内容是cccccccccc
2.string 对象上的操作
读写string对象
在执行读写操作时,string对象会自动忽略开头的空白(即空格符,换行符,制表符等)并从第一个真正的字符开始读起,直到遇到下一处空白为止。
string s; //如果输入是" Hello World! " cin>>s; //输出将是"Hello" cout<<s<<endl; //想要输出"HelloWorld!",我们可以分段输入 string s1,s2; cin>>s1>>s2; cout<<s1<<s2<<endl;
读取未知数量的string对象
string word; while(cin>>word) //反复读取,直至到达文件末尾 cout<<word<<endl; //逐个输出单词,每个单词后面紧跟一个换行
使用getline读取一整行
string line; //每次读入一整行,直至到达文件末尾 while(getline(cin,line)) cout<<line<<endl;
string的empty和size操作
empty函数根据sring对象是否为空返回一个对应的bool值
size函数返回string对象的长度(即string对象中字符的个数)
string::size_type类型
size_type是定义在类string的一种类型(无符号类型的值)
编译器可以通过auto和decltype推断变量的类型
auto len =line.size(); //len的类型是string::size_type
注意:如果一个表达式中已经有了size()函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题。
3. 处理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是16进制数字时为真 tolower(c) 如果c时大写字母,输出其小写字母;否则原样输出 toupper(c) 如果c时小写字母,输出其大写字母;否则原样输出
基于范围的for语句
for (declartion:expression)
statement
expression:一个对象,用于表示一个序列
declaration:定义变量,该变量将被用于访问序列中的基础元素。每次迭代,declaration部分的变量将会被初始化为expression部分的一个元素值。
一个例子,将string对象中的字符每行一个输出出来:
string str("some string"); //每行输出str中的一个字符 for(auto c : str) //对于str中的每个字符 cout<<c<<endl; //输出当前字符,后面紧跟一个换行符
另一个例子,统计string对象中标点符号的个数:
string s("Hello World!"); //punct_cnt的类型和s.size的返回类型一样 decltype(s.size()) punct_cnt=0; //统计s中标点符号的数量 for(auto c :s) if(ispunct(s)) //对于s中的每个字符 ++punct_cnt; //如果该字符时标点符号 cout<<punct_cnt <<" punctuation characters in "<<s<<endl; /* 程序输出的结果将是: 3 punctuation characters in Hello World! */