前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyC++12,C++中的string类型

EasyC++12,C++中的string类型

作者头像
TechFlow-承志
发布2022-08-26 16:39:42
2220
发布2022-08-26 16:39:42
举报
文章被收录于专栏:TechFlow

作者 | 梁唐

大家好,我是梁唐。

这是EasyC++系列的第12篇,咱们来聊聊C++当中的string类型。

string 类

和char *的异同

在C++当中,除了char *类型,还有专门的字符串类型,就叫做string。通过包含头文件string就可以使用:

代码语言:javascript
复制
include<string>

在很多方面,string类型的使用方法和char *一样,例如:

代码语言:javascript
复制
string str1;
string str2 = "hello world"; // 初始化和char *一致

cout << str2 << endl; // cout和char *一致
cout << str[2] << endl; // 元素访问和char *一致

除此之外,它还有一个更大的好处,就是当我们从外界读入字符串的时候,再也不用操心读入的字符串超界的问题了。因为string类设计可以让程序自动处理字符串的大小。

代码语言:javascript
复制
string str1;
cin >> str1;

C++11初始化

我们也可以使用C++11的列表初始化特性在string上,不过其实没必要,直接使用等于号赋值更方便一些:

代码语言:javascript
复制
string str1 = {"hello world"};
string str2 {"test"};

拼接

在使用char *的时候,如果我们要拼接两个字符串,需要调用函数strcat来实现。而有了string,我们可以直接使用加号来拼接两个字符串:

代码语言:javascript
复制
string str1 = "hello";
string str2 = "world";

string str3 = str1 + str2;

不仅如此,还可以使用+=,表示把另外一个字符串添加在自己末尾:

代码语言:javascript
复制
str1 += str2; // 等价于str1 = str1 + str2

长度

对于char *的字符串,我们要求长度,需要使用strlen函数。而string类型的字符串,我们可以直接调用.size()函数:

代码语言:javascript
复制
string str = "hello";

cout << str.size() << endl; // output 5

IO

前文说了,string类的cin和cout用法都和char *完全一致,不过在读取一行的时候有些区别。

代码语言:javascript
复制
char st[100];
cin.getline(st, 100);

string str;
getline(cin, str);

对于char *来说,我们调用的cin.getline表示的是cin中的一个方法。而后者,我们调用的getline传入了cin,这里的cin是一个传入的参数,并且也没有指定长度,因为string会自动设定长度。

原始字符串

关于string类型,C++11有一个原始字符串的新特性。

在字符串表示当中,当我们要添加一些特殊字符的时候,往往需要在前面加上反斜杠,表示取义。当这类字符多了之后,就会很麻烦:

代码语言:javascript
复制
cout << "i want to output \"hello world\"" << endl;

如果我们要换行,还要在其中加入\n。针对这个问题C++11提出了原始字符串,也就是说在原始字符串当中所有的符号都会被原本原样地输出,不需要再使用\来取义了。

原始字符串以"R(开头)"结尾,`比如刚才的内容就可以写成:

代码语言:javascript
复制
cout << R"(i want to output "hello world")" << endl;

不仅如此,我们还可以随意换行:

代码语言:javascript
复制
cout << R"(i want to output 
"hello world")" << endl;

但是有一个小问题,假如我们想要输出的结果当中也包含"(该怎么办呢?也有办法,编译器允许我们在"(之间加入任意的字符来做区分(空格、左括号、右括号、斜杠、控制字符除外),这样我们在结尾的时候,也需要加上同样的字符。例如:

代码语言:javascript
复制
cout << R"tst("(test)")tst" << endl;

运行之后,屏幕上会输出"(test)"的结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • string 类
    • 和char *的异同
      • C++11初始化
        • 拼接
          • 长度
            • IO
              • 原始字符串
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档