C/C++知识点之 标准库string
小标 2018-08-10 来源 : 阅读 1437 评论 0

摘要:本文主要向大家介绍了C/C++知识点之 标准库string,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之 标准库string,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

  
   标准库string 其具体代表的类型为可变长的字符序列。
使用string时需要包含以下代码:

#include    // 包含头文件
using std::string   // 进行using声明,可以免去每个string前std::的书写

初始化string对象

1     string s1;            // 默认初始化,s1是
2     string s2 = s1;        // s2是s1的副本
3     string s3 = "Value";    // s3是该字符串字面值的副本
4     string s4(10,'c');    // s4的内容是 cccccccccc 10个c
5     string s5("Value");    // s5是字面值"value"的副本,除了字面值最后的那个空字符外

大家是否注意到  s3和s5的值是一样的,但是写法却不一样。
这两个初始化的方式从结果上讲没有区别,
有区别的是初始化的过程: s3的写法叫做拷贝初始化,s5的写法叫做直接初始化。
他们的区别是 s3要经过一个默认初始化过程,而s5则不会经过这个过程
一 string的常用操作
1. 输入输出操作

    // 输入、输出操作 比如:输入“      Hello World!”  输出结果将会是 Hello
    string s;            // 空字符串
    cin >> s;            // 将string对象读入s,遇到空白停止
    cout << s << endl;    // 输出s

这里需要注意的是,输入操作将会在第一个非空字符开始,到下一个空字符结束
2. 读取整行

    // 读取整行操作
    string line;
    // 每次读入一整行,直至到达文件末尾
    while(getline(cin,line))
    {
        cout << line << endl;
    }

3. empty和size

    // 读取整行操作
    string line;
    // 每次读入一整行,直至到达文件末尾
    while(getline(cin,line))
    {
        if(!line.empty()) // 判断当字符串不为空时执行
        {// 输出字符数量和字符串
            cout << "char number("<<line.size() << "):"<< line << endl;
        }
    }

关于size_type类型
string.size()的返回值类型是size_type类型。
这个类型的底层会根据系统及编译器的不同可能发生改变。
但是不变的是这个类型是一个无符号类型,不要与带符号的类型进行混合计算。
详细原因参见改地址:https://www.cnblogs.com/ChattyKu/p/9410757.html
3. string对象的比较
(1)如果字符的位对应上完全相同,则长度较小的字符串较小
(2)未对应不同则比较第一个不同位的编码大小

    string str = "Hello";
    string phrase = "Hello World";
    string slang = "Hiya";
    // str < phrase  根据1判断
    // slang > str > phrase 根据规则2

4.两个string对象相加

    
    string add = str + phrase;
    string addAll = str + add + phrase + slang;
    

二 处理string中的字符
对字符的处理函数

    // isalnum(c)    当c是字母或数字时为真
    // isalpha(c)    当c是字母时为真
    // iscntrl(c)    当c是控制字符时为真
    // isdigit(c)    当c为数字时为真
    // isgraph(c)    当c不是空格但可打印时为真
    // islower(c)    当c是小写字母时为真
    // isprint(c)    当c是可打印字符时为真
    // ispunct(c)    当c是标点符号时为真
    // isspace(c)    当c是空白时为真
    // isupper(c)    当c是大写字母是为真
    // isxdigit(c)    当c是十六进制数字时为真
    // tolower(c)    如果c是大写字母,输出对应的小写字母:否则原样输出c
    // toupper(c)    如果c是小写字母,输出对应的大写字母:否则远洋输出c
 //基于范围的for语句 for(auto c : addAll) {  cout << c << endl; } // 基于下标的for语句 for(int i = 0; i < addAll.length(); ++i) {  cout << addAll[i] << endl; }
 

 
贴出全部代码,可用于直接编译

 1 #include 
 2 #include 
 3 using std::string;
 4 using std::cin;
 5 using std::cout;
 6 using std::endl;
 7 
 8 int main()
 9 {
10     string s1;            // 默认初始化,s1是
11     string s2 = s1;        // s2是s1的副本
12     string s3 = "hiya";    // s3是该字符串字面值的副本
13     string s4(10,'c');    // s4的内容是 cccccccccc 10个c
14     string s5("Value");    // s5是字面值"value"的副本,除了字面值最后的那个空字符外
15     
16     // 输入、输出操作
17     string s;            // 空字符串
18     cin >> s;            // 将string对象读入s,遇到空白停止
19     cout << s << endl;    // 输出s
20     
21     // 读取整行操作
22     string line;
23     // 每次读入一整行,直至到达文件末尾
24     while(getline(cin,line))
25     {
26         if(!line.empty()) // 判断当字符串不为空时执行
27         {// 输出字符数量和字符串
28             cout << "char number("<<line.size() << "):"<< line << endl;
29         }
30     }
31     
32     string str = "Hello";
33     string phrase = "Hello World";
34     string slang = "Hiya";
35     // str < phrase  根据1判断
36     // slang > str > phrase 根据规则2
37     
38     string add = str + phrase;
39     string addAll = str + add + phrase + slang;
40     
41     // isalnum(c)    当c是字母或数字时为真
42     // isalpha(c)    当c是字母时为真
43     // iscntrl(c)    当c是控制字符时为真
44     // isdigit(c)    当c为数字时为真
45     // isgraph(c)    当c不是空格但可打印时为真
46     // islower(c)    当c是小写字母时为真
47     // isprint(c)    当c是可打印字符时为真
48     // ispunct(c)    当c是标点符号时为真
49     // isspace(c)    当c是空白时为真
50     // isupper(c)    当c是大写字母是为真
51     // isxdigit(c)    当c是十六进制数字时为真
52     // tolower(c)    如果c是大写字母,输出对应的小写字母:否则原样输出c
53     // toupper(c)    如果c是小写字母,输出对应的大写字母:否则远洋输出c
54     
55     //基于范围的for语句
56     for(auto c : addAll)
57     {
58         cout << c << endl;
59     }
60     // 基于下标的for语句
61     for(int i = 0; i < addAll.length(); ++i)
62     {
63         cout << addAll[i] << endl;
64     }
65     
66     
67 }

string的使用比较多,并且使用频率很高。
所以对string的具体操作函数上还是需要多熟悉。
关于下标操作再说一点,一定保证不要越界
    

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved