zoukankan      html  css  js  c++  java
  • C++ primer: C++中string标准库类型

    C++ primer读书笔记)2013.3.18 zzy @B309

     

    C++标准库提供string类型,支持长度可变的字符串。使用时要包含头文件string,还要对名字stringusing声明。

    1   #include <string>
    2 
    3   using std::string;

     

    初始化:string标准库支持几个构造函数,在没有指明对象初始化式时,系统使用默认构造函数。

    1   string s1;          默认构造函数,s1为空串
    2 
    3   string s2(s1);       将s2初始化为s1的一个副本
    4 
    5   string s3(“value”);  将s3初始化为一个字符串子面值的副本
    6 
    7   string s4(n, ‘c’);    将s4初始化为n个字符’c’构成的字符串

     

      输入输出:string对象用标准输入cin读,用标准输出cout写,下面是几种典型实践:

      1.用标准输入/输出操作符:>> and << 

    1  string s;
    2 
    3   cin >> s;
    4 
    5   cout << s << endl;

    输入操作符>>在读取string类型时:

    ·读取并忽略开头所有的空白字符(空格、换行符、制表符);

    ·读取字符直至再次遇到空白字符,读取终止。

     

      2.读入未知数目string对象:

    1   string word;
    2 
    3   //read until end-of-file,writing each word to a new line.
    4 
    5   while(cin >> word)
    6 
    7       cout << word << endl;

     

      3.getline函数读取整行文本:

    1   string line;
    2 
    3   //read line at time until end-of-file
    4 
    5   while(getline(cin, line))
    6 
    7       cout << line << endl;

     

     getline函数接受两个参数:一个输入流对象,一个string对象。getline一次读取一行,遇到换行符停止。行尾的换行符也会读取,但是换行符不会存入string对象中。getline不会忽略行开头的换行符,如果第一个字符就是换行符,那么getline函数也将停止读入并返回,此时string对象被置为空string

      测试下面两个完整的程序对行开头/结尾的空白字符(空格、制表符、换行符)的处理,特别是行开头处的换行符:

    程序清单1

     1 #include<iostream>
     2 
     3 #include<string>
     4 
     5 // or use “using namespace std;” instead
     6 
     7 using std::cin;
     8 
     9 using std::cout;
    10 
    11 using std::endl;
    12 
    13 using std::string;
    14 
    15 int main()
    16 
    17 {
    18 
    19     string word;
    20 
    21     while(cin >> word)
    22 
    23         cout << "BEGIN-" << word << "-END" << endl;
    24 
    25     return 0;
    26 
    27 } 

    程序清单2

     1 #include<iostream>
     2 
     3 #include<string>
     4 
     5 // or use “using namespace std;” instead
     6 
     7 using std::cin;
     8 
     9 using std::cout;
    10 
    11 using std::endl;
    12 
    13 using std::string;
    14 
    15 int main()
    16 
    17 {
    18 
    19 string line;
    20 
    21 while(getline(cin, line))
    22 
    23     cout << "BEGIN-" << line << "-END" << endl;
    24 
    25     return 0;
    26 
    27 } 

    string对象的操作:

    1.成员函数size() 返回string对象中字符的个数,返回类型为string::size_type(与unsigned具有相同含义)。

    2.成员函数empty() 测试string对象是否为空,返回bool型。 

    1   string s(“zzy@Library”);
    2 
    3   cout << s.size() << endl;
    4 
    5   if(s.empty())
    6 
    7       cout << “empty!” << emdl;

     

    3.关系运算:==  !=  <  <=  >=  >,比较两个string对象的大小或相等关系,表达式返回的是bool类型。

      关系操作符比较两个string对象时采用了和(大小写敏感的)字典排序相同的策略:

      ·如果两个string对象长度相同,且对应字符相同,那么它们是相等的;

      ·如果两个string对象长度不同,且短的string对象是长的string对象的前缀,则短的string对象小;

      ·比较两个string对象出现的第一个不同的字符。

    4.赋值操作

      可以把一个string对象赋值给另一个string对象,也可以把一个字符串字面值赋值给一个string对象

    1   string s1,s2;
    2 
    3   s1 = “zzy @ Library”;
    4 
    5   s2 = s1;

    5.string对象的加法被定义成连接。两个string对象可以通过’+’操作符或”+=”操作符连接成一个string对象。string对象还可以和字符串字面值连接,’+’操作符的两个操作数中至少有一个要是string对象,表达式返回一个string对象。

      ‘+’操作符两个操作数中有一个是string对象,另一个还可以是单个字符,或数字,数字按ASCII码转换成相应字符。

    程序清单3

     1 #include<iostream>
     2 
     3 #include<string>
     4 
     5 //or use “using namespace std;” instead
     6 
     7 using std::cin;
     8 
     9 using std::cout;
    10 
    11 using std::endl;
    12 
    13 using std::string;
    14 
    15 int main()
    16 
    17 {
    18 
    19     string s1 = "zzy", s2 = " @ ", s3 = "Library!\n";
    20 
    21     string s4 = s1 + s2 + s3;
    22 
    23     cout << s4;
    24 
    25     string s5 = "IF " + s4 + "coding " + "ENDIF";
    26 
    27     cout << s5;
    28 
    29     return 0;
    30 
    31 }

    6.string对象通过[ ]下标操作符访问每个元素,范围是0 - (size() - 1)C++标准库对访问越界不做检查。

     1     string s = "zzy @ Library4D";
     2 
     3     for(string::size_type i = 0; i != s.size(); ++i)
     4 
     5         cout << s[i];
     6 
     7     cout << endl;
     8 
     9  
    10 
    11     for(int i = -1; i <= 20; ++i)
    12 
    13         cout << s[i];
    14 
    15     cout << endl;
    16 
    17  
    18 
    19     for(int i = 0; i < s.size(); ++i)
    20 
    21         s[i] = '$';
    22 
    23    cout << s << endl;

     

  • 相关阅读:
    [常用的Cmd运行命令]
    [Ajax三级联动 无刷新]
    [占位符 &nbsp; ]
    [String.Format(转换时间格式)]
    [ASP.NET应用到的时间处理函数]
    [SQL Server常用系统存储过程大全]
    [SQL Server创建视图时的注意点]
    [SQL Server 视图的创建- (create view必须是批处理中仅有的语句问题)]
    [SQL 高级查询运算符的用法 UNION (ALL),EXCEPT(ALL),INTERSECT(ALL) ]
    layui 表单遇到的小问题
  • 原文地址:https://www.cnblogs.com/Lattexiaoyu/p/2966835.html
Copyright © 2011-2022 走看看