头文件及命名空间
#include<string>
using std::string
定义及初始化string对象
string s1; //默认初始化,s1是一个空串
string s2(s1);//s2是s1的副本
string s2=s1;//等价于s2(s1),s2是s1的副本
string s3("value");//s3是字面值"value"的副本,除了字面值最后那个空字符
string s3="value";//等价于s3("value"),s3是字面值"value"的副本
string s4(n,'c');//把s4初始化为由连续n个字符c组成的串
读写string对象
标准库iostream中cin,cout可读写int,double等内置类型的值,同样,也可以使用IO操作符读写string对象;
int main()
{
string s; //空字符串
cin>>s; //将string对象读入s,遇到空白停止
cout<<s<<endl; //输出s
return 0;
}
在char类型中,有输入函数scanf来读取,但遇到空就会终止,同样的,用cin来读取string对象时,遇到空也会终止。比如程序输入“Hello World!”,程序将输出"Hello"。
当然,和内置类型的输入操作一样,string对象的此类操作也是返回运算符左侧的运算对象作为其结果。因此,多个输入或输出也可以连在一起写:
string s1,s2;
cin>>s1>>s2; //把第一个读入s1中,第二个读入s2中 输入:Hello World
cout<<s1<<s2; //输出两个string对象 输出:HelloWorld
读入未知数量的string对象
int main()
{
string word;
while(cin>>word) //反复读取,直至到达文件末尾
cout<<word<<endl; //逐个输出单词,每个单词后紧跟一个换行符
return 0;
}
使用getline读取一行
cin可以读取string对象,但有一缺点就是遇到空格就结束,而getline刚好可以弥补这个缺点,读取一行字符串,包含空格,直到遇到第一个换行符,但不存放换行符。
int main()
{
stirng line;
//每次读取一整行,直至达到文件末尾
while(getline(cin,line))
cout<<line<<endl;
return 0;
}
string 的empty和size操作
empty函数判断string对象是否为空,并返回一个bool值,如果为空,则返回true,否则返回false。
while(getline(cin,line))
{
if(!line.empty()) //若不为空则输出对象line
cout<<line<<endl;
}
size函数返回string对象的长度(即string对象中字符的个数),可以使用size函数只输出长度超过80的字符串:
string line;
while(getline(cin,line))
if(line.size()>80)
cout<<line<<endl;
比较string对象
string类定义了几种用于比较字符串的运算符,这些运算符逐一比较string对象中的字符,并且对大小写敏感。
相等性运算符:==和!= 检验两个字符串是否相等;
关系运算符:<,<=,>,>= 分别检验一个string对象是否小于,小于等于,大于,大于等于另外一个string对象。
上述运算符都依照(大小写敏感)字典顺序:
1.如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象。
2.如果两个string对象在某些对应的位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果。
为string对象赋值
string st1(10,'c'),st2;//st1的内容是 cccccccccc,st2是一个空字符串
st1=st2;//赋值,用st2的副本替换st1的内容
//此时st1和st2都是空串
两个string对象相加
string类允许使用加法运算符(+)将两个string对象连接起来,也可使用复合赋值运算符(+=)把右侧string对象的内容加到左侧string对象的后面:
string s1="hello, ",s2="world\n";
string s3=s1+s2; //s3的内容是hello, world\n;
s1+=s2; //等价于s1=s1+s2
字面值与string对象相加
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧对象至少有一个是string
string s1="hello",s2="world";
string s3=s1+', '+s2+'\n';
string s4=s1+', ';//正确,把一个string对象和一个字面值相加
string s5="hello"+', ';//错误,两个运算符都不是string
string s6=s1+', '+"world";//正确,每个加法运算符都有一个运算对象string
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是标点符号时为真(即c不是控制字符、数字、字母、可打印空白中的一种)
isspace(c) 当c是空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符中的一种)
isupper(c) 当c是大写字母时为真
isxdigit(c) 当c是16进制数字时为真
tolower(c) 如果c是大写字母,输出相应的小写字母,否则原样输出
toupper(c) 如果c是小写字母,输出相应的大写字母,否则原样输出