C++字符串

字符数组

字符数组与字符串

  • 由一系列字符组成的一个处理单位称为字符串,如一个单词或一个句子。
    • C++ 中的字符串常量是用一对双引号括起来,由 '\0' 作为结束符的一组字符。

Tips:不含任何字符的字符串称为空字符串,用一对双引号表示,即 "" 。空字符串并不是不占空间,而是占用了 11 字节的空间,这个字节中储存了一个 '\0'

  • 通常用一个字符数组来保存字符串,即所有元素的类型都是字符型的数组
    • 由于字符串以 '\0' 作为结束符,因此所需的储存空间比实际的字符串长度大 11。

字符数组的输入输出

字符数组可以进行逐个字符的输入输出,这种做法和普通的数组操作一样,分为以下两种方式:

  • 将整个字符串一次性地用对象 cincout>><< 操作完成输入或输出。

  • 通过 cin 的成员函数 getgetline 输入。

  • 方式一:使用 cincout

    • 对于字符数组 userName,输入一个字符串到数组中,可以使用语句:

      cin >> ch;
      
      • 输入的时候,使用cin语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入
      • cin向计算机输入一串字符时,输入的字符的数量应该少于已定义的字符数组的长度,否则会出现问题
      • 如果输入的字符的数量小于字符数组长度时,剩下的部分会默认补上'\0'
    • 对于字符数组 userName,输出其中的内容:

      cout << ch;
      
      • 从字符数组的第一个字符开始输出,直到遇到 '\0'(不会输出 '\0'
      • 如果一个字符数组中包含一个以上'\0',则遇第一个'\0'cout输出就结束
  • 方式二:用 scanf printf 也可以输入输出字符串,有以下一些需要注意的点:

    • 字符的输入用

      scanf("%c", &变量名)
      

      ,而输入一个字符串用

      scanf("%s", 数组名)
      
      scanf("%s", userName);
      
      • 注意,因为是字符串也是一个字符数组,scanf里,数组前不需要加&,只有变量名字需要加&
    • 字符的输出用

      printf("%c", &变量名)
      

      ,而输出一个字符串用

      printf("%s", 数组名)
      
      printf("%s", userName);
      

字符数组型字符串的常用操作

字符串不能用系统的内置运算符进行操作,C++语言设计了一个 cstring 库,提供了一些用来处理字符串的函数。

  • 连接字符串

    使用 strcat(s1, s2) 函数可以把字符串 s2 连接到 s1 的末尾。

  • 获取字符串长度

    使用 strlen(s1) 函数可以返回字符串 s1 的有效字符数。比如"yes"的长度就是3。

  • 比较字符串的字典序

    使用 strcmp(s1, s2) 函数可以比较两个字符串之间的字典序:如果 s1s2是相同的,会返回0;如果s1的字典序在 s2前面,则返回值会小于0;如果s1的字典序在 s2后面,则返回值会大于0。

  • 复制字符串

    使用 strcpy(s1, s2)函数可以复制字符串 s2 到字符串 s1。如果 s2s1 短,那么 s1 这个数组后面没被覆盖的部分不会改变。比如s1存的是{q, w, e, r, \0}, s2存的是{a, s, \0},那么使用strcpy(s1, s2)后,s1前五位应该是{a, s, \0, r, \0}

String类型

string 类型的基本操作

  • 字符数组型字符串是把字符串当作一个元素为字符的一维数组,而 string 类型是直接把字符串当作一个整体,可以像整型变量、字符变量一样使用。

string 类型的用法有以下一些注意点:

  • 头文件

    • 首先需要加载 string 类型所在的头文件。
    # include 
    
  • 声明和初始化

    • string 类型的声明和初始化和普通变量一样。
    // 声明
    string a;
    
    // 声明与初始化
    string b = "yes";
    
  • 输入输出

    • string 类型的字符串一般直接通过cincout进行输入输出。
      • 输入的时候,使用cin语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入
      • 输出的时候,从字符串中第一个字符开始输出,直到遇到 '\0'(不会输出 '\0'

string 类型的常用操作

对于string 类型的字符串,官方提供了一些字符数组型字符串常用处理函数,可以对字符数组型的字符串进行一些常规操作。本节选取抽取一些常用操作,和字符数组型字符串对照讲解一下:

  • 连接字符串

    • 字符数组型字符串会使用 strcat(s1, s2) 函数把字符串 s2 连接到 s1 的末尾。
    • string 类型可以直接使用 s1 + s2 连接两个字符串。
  • 获取字符串长度

    • 字符数组型字符串会使用 strlen(s1) 函数返回字符串 s1 的字符数。
    • string 类型可以直接使用 s1.size() 或者 s1.length() 返回字符串 s1 的字符数。
  • 比较字符串的字典序

    • 字符数组型字符串会使用

      strcmp(s1, s2)
      

      函数比较两个字符串之间的字典序:

      • 如果s1s2是相同的,会返回0
      • 如果s1s2前面,则返回值会小于0
      • 如果s1s2后面,则返回值会大于0
    • string 类型可以直接使用关系运算符来比较两个字符的字典序:

      • 如果s1 < s21(真),就表示s1的字典序在 s2前面
      • 如果s1 < s20(假),就表示s1的字典序不在 s2前面
  • 复制字符串

    • 字符数组型字符串使用 strcpy(s1, s2)函数复制字符串 s2到字符串 s1
    • string 类型可以直接使用赋值表达式 s1 = s2来复制字符串 s2到字符串 s1

string 类型的其他操作

另外,还有一些 string 类型的其他非常方便的操作函数,详见下面的表格:

  • 字符数组型字符串使用 strcpy(s1, s2)函数复制字符串 s2到字符串 s1
  • string 类型可以直接使用赋值表达式 s1 = s2来复制字符串 s2到字符串 s1

string 类型的其他操作

另外,还有一些 string 类型的其他非常方便的操作函数,详见下面的表格:

C++字符串_第1张图片

你可能感兴趣的:(C++,c++)