C++ 字符串



C++ 提供以下两种类型的字符串表示:

  • C 风格字符串。
  • 标准 C++ 中引入的 string 类类型。

C 风格字符串

C 风格字符串起源于 C 语言,并在 C++ 中继续得到支持。这个字符串实际上是一个字符的一维数组,以字符 '\0' 结尾。因此,一个空终止字符串包含构成字符串的字符,后面跟着一个字符。

以下声明和初始化创建一个包含单词“Hello”的字符串。为了在数组末尾保存空字符,包含字符串的字符数组的大小比单词“Hello”中的字符数多一个。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

如果您遵循数组初始化规则,则可以按如下方式编写上述语句:

char greeting[] = "Hello";

以下是 C/C++ 中上述定义的字符串的内存表示:

String Presentation in C/C++

实际上,您不会在字符串常量的末尾放置空字符。C++ 编译器在初始化数组时会自动在字符串末尾放置 '\0'。让我们尝试打印上述字符串:

示例

#include <iostream>

using namespace std;

int main () {

   char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

   cout << "Greeting message: ";
   cout << greeting << endl;

   return 0;
}

编译并执行上述代码时,将产生以下结果:

Greeting message: Hello

C 风格字符串函数

C++ 支持广泛的函数来操作以 null 结尾的字符串。这些函数在<string.h> 头文件中定义。

序号 函数和用途
1

strcpy(s1, s2);

将字符串 s2 复制到字符串 s1。

2

strcat(s1, s2);

将字符串 s2 连接到字符串 s1 的末尾。

3

strlen(s1);

返回字符串 s1 的长度。

4

strcmp(s1, s2);

如果 s1 和 s2 相同,则返回 0;如果 s1<s2,则返回小于 0 的值;如果 s1>s2,则返回大于 0 的值。

5

strchr(s1, ch);

返回指向字符串 s1 中字符 ch 的第一次出现的指针。

6

strstr(s1, s2);

返回指向字符串 s1 中字符串 s2 的第一次出现的指针。

示例

以下示例使用了上述几个函数:

#include <iostream>
#include <cstring>

using namespace std;

int main () {

   char str1[10] = "Hello";
   char str2[10] = "World";
   char str3[10];
   int  len ;

   // copy str1 into str3
   strcpy( str3, str1);
   cout << "strcpy( str3, str1) : " << str3 << endl;

   // concatenates str1 and str2
   strcat( str1, str2);
   cout << "strcat( str1, str2): " << str1 << endl;

   // total lenghth of str1 after concatenation
   len = strlen(str1);
   cout << "strlen(str1) : " << len << endl;

   return 0;
}

编译并执行上述代码时,将产生如下结果:

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

C++ 中的 String 类

标准 C++ 库提供一个string 类类型,它支持上面提到的所有操作,以及更多功能。

String 类的示例

让我们检查以下示例:

#include <iostream>
#include <string>

using namespace std;

int main () {

   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;

   // copy str1 into str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;

   // concatenates str1 and str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;

   // total length of str3 after concatenation
   len = str3.size();
   cout << "str3.size() :  " << len << endl;

   return 0;
}

编译并执行上述代码时,将产生如下结果:

str3 : Hello
str1 + str2 : HelloWorld
str3.size() :  10

创建字符串

我们可以通过以下两种方法之一创建字符串变量:

使用字符数组创建字符串

我们可以使用C 类型数组以字符格式声明字符串。这可以通过以下语法完成:

语法

char variable_name[len_value] ;

这里,len_value 是字符数组的长度。

使用字符数组创建字符串的示例

在下面的示例中,我们声明一个字符数组,并为其赋值。

#include <iostream>
using namespace std;

int main() { 
   char s[5]={'h','e','l','l','o'};
   cout<<s<<endl;
   return 0; 
}
输出
hello

使用<string>创建字符串

我们可以使用 'string' 关键字声明字符串变量。这包含在<string> 头文件中。声明字符串的语法解释如下:

语法

string variable_name = [value];

这里,[value] 是可选的,可以在声明期间使用它来赋值。

示例

在下面的示例中,我们声明一个字符串变量,并为其赋值。

#include <iostream>
using namespace std;

int main() { 
   string s="a merry tale";
   cout<<s;    
   return 0; 
}
输出
a merry tale

遍历字符串(迭代字符串)

我们可以通过两种方式迭代字符串:

使用循环语句

我们可以使用 for 循环、while 循环和 do while 循环,使用指向字符串中第一个和最后一个索引的指针来遍历字符串。

使用迭代器

使用基于范围的循环,我们可以使用迭代器迭代字符串。这是通过在运行基于范围的循环时使用 ":" 运算符实现的。

迭代字符串的示例

以下示例代码展示了使用这两种方法遍历字符串:

#include <iostream>
using namespace std;

int main() {
   string s="Hey, I am at TP.";

   for(int i=0;i<s.length();i++){
      cout<<s[i]<<" ";
   }
   cout<<endl;

   for(char c:s){
      cout<<c<<" ";
   }

   return 0;
}

输出

H e y ,   I   a m   a t   T P . 
H e y ,   I   a m   a t   T P . 

访问字符串的字符

我们可以使用迭代器和指向字符串索引的指针来访问字符串的字符。

示例

以下示例代码展示了如何访问字符串中的字符:

#include <iostream>
using namespace std;

int main() {
   string s="Hey, I am at TP.";
   cout<<s<<endl;
   for(int i=0;i<s.length();i++){
     s[i]='A';
   }
   cout<<s<<endl;

   for(char &c:s){
      c='B';
   }
   cout<<s<<endl;

   return 0;
}

输出

Hey, I am at TP.
AAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBB

字符串函数

String 是<string>类的对象,因此它具有各种函数,用户可以利用这些函数执行各种操作。其中一些函数如下:

函数 描述
length() 此函数返回字符串的长度。
swap() 此函数用于交换两个字符串的值。
size() 用于查找字符串的大小
resize() 此函数用于将字符串的长度调整到给定数量的字符。
find() 用于查找参数中传递的字符串
push_back() 此函数用于将字符推送到字符串的末尾
pop_back() 此函数用于从字符串中弹出最后一个字符
clear() 此函数用于删除字符串的所有元素。
find() 此函数用于搜索字符串内的某个子字符串,并返回子字符串的第一个字符的位置。
replace() 此函数用于将范围 [first, last) 中等于旧值的每个元素替换为新值。
substr() 此函数用于从给定字符串创建子字符串。
compare() 此函数用于比较两个字符串,并以整数的形式返回结果。
erase() 此函数用于删除字符串的某个部分。

字符串长度

字符串的长度是字符串中存在的字符数。因此,字符串“apple”的长度为 5 个字符,字符串“hello son”的长度为 9 个字符(包括空格)。这可以使用<string> 头文件中的 length() 方法访问。

语法

语法解释如下:

int len = string_1.length();

示例

#include <iostream>
#include <string>
using namespace std;

int main() {
   string x="hey boy";
   cout<<x.length()<<endl;

   return 0;
}

输出

7

字符串连接

字符串连接是将两个字符串组合在一起的一种方法。这可以通过两种方式完成:

加法运算符

加法运算符用于添加两个元素。对于字符串,加法运算符会连接两个字符串。这在以下示例中清楚地解释:

示例

#include <iostream>
#include <string>
using namespace std;

int main() {
   string x = "10";
   string y = "20";
   cout<<x+y<<endl;

   return 0;
}
输出
1020

这与整数加法不同。当我们取两个整数并使用加法运算符将它们相加时,我们得到这两个数字的和。

这在以下示例中清楚地解释:

示例

#include <iostream>
#include <string>
using namespace std;

int main() {
   int x = 10;
   int y = 20;
   cout<<x+y<<endl;

   return 0;
}
输出
30

使用 string append() 方法

C++ 是一种面向对象的编程语言,因此字符串实际上是一个对象,它包含可以对字符串执行某些操作的函数。我们可以使用string append() 方法将一个字符串附加到另一个字符串。

此操作的语法如下:

语法

string_1.append(string_2);

此方法的使用在以下示例中清晰地显示:

示例

#include <iostream>
#include <string>
using namespace std;

int main() {
   string x="hey boy";
   string y=" now";
   x.append(y);
   cout<<x<<endl;

   return 0;
}
输出
hey boy now

C++ 中的字符串输入

字符串可以作为程序的输入,最常见的方法是使用 cin 方法。

有三种方法可以将字符串作为输入,这些方法如下所示:

  • cin
  • getline()
  • stringstream

使用 cin 方法

这是将字符串作为输入的最简单方法。语法如下:

语法

cin>>string_name;

示例

#include <iostream>
using namespace std;

int main() {

   string s;
   cout << "Enter custom string : "<<endl;
   //enter the string here
   cin>>s;
   cout<<"The string is : "<<s;
}

使用 getline() 方法

getline() 方法可用于从输入流读取字符串。这在 <string> 头文件中定义。上述方法的语法如下:

语法

getline(cin, string_name);

示例

#include <iostream>
using namespace std;

int main() {

   string s;
   cout << "Enter String as input : " << endl;
   getline(cin, s);
   //enter the string here
   cout << "Printed string is : " << s << endl;
   return 0;
}

使用 stringstream

stringstream 类用于一次性接收多个字符串作为输入。上述方法的语法如下:

语法

Stringstream object_name(string_name);

示例

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main() {

   string s = "Hey, I am at TP";
   stringstream object(s);
   string newstr;
   // >> operator will read from the stringstream object
   while (object >> newstr) {
      cout << newstr << " ";
   }
   return 0;
}

输出

Hey, I am at TP
广告