标准库string表示可变长的字符序列,使用string类型不要包含string头文件

#include <string>
using std::string;
string对象的初始化
string s1; //空字符串
string s2 = s1; //s2是s1的副本
string s3 = "abc"; //使用字符串
string s3("abc");
string s4(10,'c'); //内容是10个c

string操作

读写string对象

cin >> s1 >> s2;

将标准输入的内容第一个放到s1中,第二个放到s2中,string对象会自动忽略开头的空白,并从第一个真正的字符开始读取,直到遇到下一处空白为止。

如果希望能在最终得到的字符串中保留输入的空白符需要使用getline函数代替原来的>>运算符。getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容一直到遇到换行符为止,然后把所读取的内容存入到string对象中取。getline只要一遇到换行符就结束读取操作并返回结果。getline返回结果是输入流,所以可以当做判断条件。

string line;
while(getline(cin,line))
cout << line <<endl;

这样每次读取一行进行输出。

empty()函数是判断字符串是否为空,size()函数获取字符串长度,返回的类型是string::size_type,是一个无符号值,需要注意的是size()的返回值不要和有符号类型的值进行运算。

字符串进行拼接的话直接使用+,每个加法运算两边的对象至少有一个是string。

string s1 = "abc";
string s2 = "ggg";
string s3 = s1 + s2;
string s4 = s1 + ","+ s2;
string s5 = "hello"+","+ s1; //这样是不允许的
string s6 = s1 +"," + "hello"; //这样可以,s1+","返回的是string类型

循环字符串中的每个字符

string str("hello world");
for(auto c:str){
cout << c << endl;
}

有对其中某个字符的判断函数,需要引入#include <cctype>

isalnum(c) //字母或数字为真
isalpha(c) //字母为真
isdigit(c) //数字为真
islower(c) //小写字母为真
isspace(c) //空白为真
isupper(c) //大写字母为真

如果想改变字符串中的字符,需要把循环变量定义为引用类型

string s("hello world");
for(auto &c : s){
c = toupper(c); //转换成大写
}
cout << s << endl;

也可以使用下标进行访问某个字符,从0开始到size()-1

string s("hello world");
s[0] = toupper(s[0]); //把第一个字符转换成大写