首页 > 代码库 > c++ 之 string

c++ 之 string

  相当于 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是字母或者数字时为真。

  2. 使用for(auto c : s1) 来遍历整个string对象 。tip : 这里的 c 是个 char 对象,在vs2015 中是 typedef char .... 

  3. 和数组一样使用下标  [] 进行访问。 例如 s1[i] = ‘x‘; 当 s1 为空时,则 s1[0] 就是为定义的。

c++ 之 string