相当于 C 的 char [], C++ 添加了一个新的类—— string.
使用 string 类型 必须添加头文件 #include <string>
using std::string; 接下来介绍一些 string 常用的一些操作。
string 类型的定义 和 基本类型的定义无太大的区别。多了这样的定义模式, string s1(10,c); 等价于 string s1 = "cccccccccc";
string 对象上的操作
string 的一些操作
getline(is , s ) 从 is 中读取一行赋值给 s ,返回 is;
s.empty() 当 s 为空返回 true,否则返回 false;
s.size() 返回 s 中字符的个数
s1+s2 返回 s1 和 s2 连接后的结果
注意: 将标准输入的内容读取到 s 中时,string 对象会自动忽略开头的空白 (即空格符,换行符。制表符等),并从第一个真正的字符开始读起,直到遇见下一处空白为止。例如当输入 “ erhuoL fine!” 时,string 对象只会读取 “erhuoL”
那么,当我们需要读取一整行字符时,应该怎么做呢?
getline,我们可以使用这个函数,具体用法如下:
string s1; // 省略了 头文件 命名空间
getline(cin , s1);
这样处理器会把换行符前面所有的(包括换行符)全部读取到 s1 中,但是保存的时候并不会保存换行符。(此说明,触发 getline 函数返回的那个换行符实际上被丢弃了)。
但是值得注意的是,getline 只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。例:
Hi!erhuoL.
如此输入得到的会是一个空 string .
特别在此介绍一下两个string 对象间比较大小,按照(大小写敏感)字典顺序:
1. 如果两个string 对象的长度不一致,而且较短对象的每个字符都与较长对象对应位置上的字符相同,那么较短string 对象小于较长 string 对象。
2. 如果两个string 对象不相等,那么就是两个对象中第一对相异字符比较的结果。
对于之前操作中的 size 函数
其所返回的是一个 string::size_type , 这是个配套的类型,体现了标准库类型和机器无关的特性,特别注意,这是一个无符号的值而且能足够存放下任何 string 对象的大小。基本类型中我们知道,int 和 无符号类型值的混用会造成无法估计得结果,因此,如果一条表达式中已经有了 size() 函数就不要再使用 int 了,以避免混用可能带来的问题。
例: auto len = s1.size(); // len 就是一个string::size_type 类型的值。
虽然不知道具体细节,但是这个值可以用来执行 类似 while(len--) 的操作。
处理string对象中的字符
1. 我们可以使用 cctype 头文件中的函数来判断其中某个字符的特性,例: isalnum(c) 当c是字母或者数字时为真。
tip: 这里给出两个比较方便的函数
tolower : 如果是大写字母,输出对应的小写字母,否则原样输出。
toupper :如果是小写字母,输出对应的大写字母,否则原样输出。
2. 使用for(auto c : s1) 来遍历整个string对象 。tip : 这里的 c 是个 char 对象,在vs2015 中是 typedef char ....
3. 和数组一样使用下标 [] 进行访问。 例如 s1[i] = 'x'; 当 s1 为空时,则 s1[0] 就是为定义的。