string的相关用法
一、string对象初始化
常见的初始化有两种方式:拷贝初始化和直接初始化。
点击查看代码
string s1="hello";//拷贝初始化
string s2("world");//直接初始化
string s3(10,c);//十个c,cccccccccc
二、string对象的运算
string运算左右位必须要有一个string的对象,不能两个字面值直接参与运算。
点击查看代码
string S1 = "hello";
string S2 = "world";
string S3 = S1 + S2;//可以直接相加
S3 = S1 + "world";//可以由一个string对象与一个字面值相加
S3 = "hello" + "world";//error , 不能字面值直接相加
三、读取未知数量的string对象
1. 一个单词一个单词的读取遇见空格或换行结束。
点击查看代码
string word;
while (cin >> word)
cout << word << endl;
2. 使用getline读取一整行,需要使用string的头文件。 getline函数会读取换行符但不会输出。
点击查看代码
while (getline(cin, line))
{
if (!line.empty())//empty函数是来判断读取的string是否为空
cout << line << endl;
}
四、处理string对象中的字符
一、处理每个字符
c++11中的语句:范围for语句。
语法形式为:for(declaration:expression)
expression部分是一个对象,表示一个序列。declaration部分用于定义一个变量,该变量访问序列中的对象。
简单来说,将expression中的string对象当成一串字符数组也是字符序列,每次迭代将序列中的字符依次赋值给declaration
点击查看代码
string s("hello! world!");
for (auto& c : s)//使s中每一个字符引用封装为c
c = toupper(c);//将s中的字符变为大写后重新赋值给c
cout << s;
输入: hello!wold!
输出: HELLO!WOLD!
二、处理单个字符
利用下标索引,将string对象当成字符数组利用下标找到需改便的对象。
例如首字母大写:
点击查看代码
string s("some string");
if(!s.empty())
s[0]=toupper(s[0]);
结果:Some string
利用下标执行迭代
依次处理s中的字符将小写转为大写,直到处理完全部或遇见空白。
代码示例:
点击查看代码
string s("hello! world!");
for (decltype(s.size()) index = 0; index <= s.size()&& !isspace(s[index]); index++)//isspace用来判断是否为空格,若为空格则不符合循环条件
s[index] = toupper(s[index]);
cout << s;
输出:HELLO! world!