C++标准库类型string
string可表示变长的字符串。使用string类型必须包含string头文件,string定义在std中。
定义和初始化string
string s1;//默认初始化,空串
string s2(s1)://s2是s1的副本
string s3("vaiue")//s3是字面值的副本,无空字符串结尾
string s4(n,'c');//连续n个字符c组成的字符串
直接初始化和拷贝初始化
方便记,通过等号初始化的是拷贝初始化,通过自己的函数初始化的是直接初始化。
string对象上的操作
string s;
cin>>s;
string对象会自动忽略开头的空白,从第一个真正的字符串开始读起,直到遇到下一个空白为止。
读取未知个数的字符串
while(cin>>word){
...
...
}
使用getline()读取一整行
读取一整行,包括空白,不包括换行符。getline(cin>>s).
wihle(cin>>s){
…
}
string的empyt和size操作
string s(10,'c');
auto 1=s.size();//字符串的长度
bool b=s.empty();//s是否为空
string::size type
size函数的返回值为string::sizetype,无符号整数类型,可以存放下任何string的大小。
尽量使用auto和decltype来定义接收它的变量。避免int和无符号数的混用。
比较string对象
原理:逐一比较,大小写敏感。
支持>,<,==,<=,>=等
string对象的相等意味着长度和包含的字符完全一样。
先比较对应位置字符,后比字符串长度。
为string赋值
string st1(10,'c'),st2;
str1=st2;//用st2副本替换st1的内容。
两个string对象相加
两个string对象相加是个新的string对象。
string s1="hello",s2.=."world\n";
string s3=s1 + s2;//s3的内容是hello,world\n
字面值和string相加
字面值:"hel1o”,“world”…
相加时,加号两侧至少有一个是string。
字符串(string)和字面值是不同的对象(c语言遗留)
处理string对象中的字符( c )
isalnum(c);//字母或数字为真
isalpha(c);//字母为真
isdigit(c);//数字为真
islower(c);//小写为真
ispunct(c);//标点为真
isspace(c);//空格为真
tolower(c);//若大写,转小写
toupper(c);//若小写,转大写
使用c++版本的c标准库头文件了,不要用.h
使用范围for循环处理每个字符串
string str("some string");
for(auto c : str){
cout<<c<<endl;
}
将str中的字符拷贝给c,每次循环开始创建c,结束销毁(c = str[i])
使用for语句改变字符串中的字符
如果想要改变字符串中的字符,必须把循环变量定义为引用值
string str("some string");
for(auto &c : str){
c = toupper(c);
}
将str中的字符和c绑定,每次循环开始创建c,结束销毁(auto &c = str[i])
可以使用下表随机访问字符串字符