C++中的string类型

 更新时间:2021年11月03日 11:55:35   作者:梁唐  
这篇文章主要介绍了C++中的string类型,在C++当中,除了char 类型,还有专门的字符串类型,就叫做string,下面文字将围绕其相关资料展开详细内容,需要的朋友可以参考一下,希望对你有所帮助

1、string 类

1.1 和char *的异同

C++当中,除了char *类型,还有专门的字符串类型,就叫做string

通过包含头文件string就可以使用:

include<string>


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

string str1;
string str2 = "hello world"; // 初始化和char *一致

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


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

string str1;
cin >> str1;

1.2 C++11初始化

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

string str1 = {"hello world"};
string str2 {"test"};

1.3 拼接

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

string str1 = "hello";
string str2 = "world";

string str3 = str1 + str2;


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

str1 += str2; // 等价于str1 = str1 + str2

1.4 长度

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

string str = "hello";

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

1.5 IO

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

char st[100];
cin.getline(st, 100);

string str;
getline(cin, str);

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

1.6 原始字符串

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

在字符串表示当中,当我们要添加一些特殊字符的时候,往往需要在前面加上反斜杠,表示取义。

当这类字符多了之后,就会很麻烦:

cout << "i want to output \"hello world\"" << endl;

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

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

cout << R"(i want to output "hello world")" << endl;

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

cout << R"(i want to output 
"hello world")" << endl;

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

cout << R"tst("(test)")tst" << endl;

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

到此这篇关于C++中的string类型的文章就介绍到这了,更多相关C++ string类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

注:文章转自微信公众号:Coder梁(ID:Coder_LT)

相关文章

  • C语言实现简易井字棋游戏

    C语言实现简易井字棋游戏

    这篇文章主要为大家详细介绍了C语言实现简易井字棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • 基于Sizeof与Strlen的区别以及联系的使用详解

    基于Sizeof与Strlen的区别以及联系的使用详解

    本篇文章是对Sizeof与Strlen的区别以及联系的使用进行了详细的介绍。需要的朋友参考下
    2013-05-05
  • C++实现字符串切割的两种方法

    C++实现字符串切割的两种方法

    这篇文章主要介绍了C++实现字符串切割的两种方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Qt 事件处理机制的深入理解

    Qt 事件处理机制的深入理解

    本文主要介绍了Qt 事件处理机制的深入理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C语言小项目计时器的实现思路(倒计时+报警提示)

    C语言小项目计时器的实现思路(倒计时+报警提示)

    这篇文章主要介绍了C语言小项目计时器(倒计时+报警提示)的实现思路,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • C++实现优先队列的示例详解

    C++实现优先队列的示例详解

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。本文将用C++实现优先队列,需要的可以参考一下
    2022-06-06
  • C++的继承和派生你了解吗

    C++的继承和派生你了解吗

    这篇文章主要为大家详细介绍了C++继承和派生,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++分析类的对象作类成员调用构造与析构函数及静态成员

    C++分析类的对象作类成员调用构造与析构函数及静态成员

    终于到了对象的初始化和清理的最后阶段了,在这里分享一个cpp里有多个类时,一个类的对象作为另一个类成员的时候构造函数和析构函数调用的时机。还有一个静态成员也是经常考到的点,在这篇博客将会详解其概念并举出案例巩固,让我们开始
    2022-05-05
  • OpenCV绘制正多边形的方法

    OpenCV绘制正多边形的方法

    这篇文章主要为大家详细介绍了OpenCV绘制正多边形的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C语言JNI的动态注册详解

    C语言JNI的动态注册详解

    这篇文章主要介绍了JAVA JNI的动态注册,这里提供简单实例代码,需要的朋友可以参考下,小编觉得写的还不错,希望能给你带来帮助
    2021-08-08

最新评论