C++ 字符串
C++ 提供以下两种类型的字符串表示 -
- C 风格的字符串。
- 标准 C++ 中引入的 string 类类型。
C 风格的字符串
C 风格的字符串起源于 C 语言,并继续在 C++ 中得到支持。该字符串实际上是一个一维字符数组,以 空 字符 '\0' 结尾。因此,以空字符结尾的字符串包含组成该字符串的字符,后跟一个 空。
以下声明和初始化创建了一个由单词"Hello"组成的字符串。为了将空字符保存在数组末尾,包含该字符串的字符数组的大小应比单词"Hello"的字符数多一个。
char greet[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
如果遵循数组初始化规则,则可以将上述语句编写如下 -
char greet[] = "Hello";
以下是上述定义的字符串在 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++ 支持多种操作以空字符结尾的字符串的函数。这些函数定义在 <string.h> 头文件 中。
Sr.No | 函数 &用途 |
---|---|
1 |
将字符串 s2 复制到字符串 s1 中。 |
2 |
将字符串 s2 连接到字符串 s1 的末尾。 |
3 |
返回字符串 s1 的长度。 |
4 |
如果 s1 和 s2 相同,则返回 0;如果 s1 |
5 |
返回指向字符串 s1 中字符 ch 首次出现的指针。 |
6 |
返回指向字符串 s2 首次出现的指针s1. |
示例
以下示例使用了上述几个函数 −
#include <iostream> #include <cstring> using namespace std; int main () { char str1[10] = "Hello"; char str2[10] = "World"; char str3[10]; int len ; // 将 str1 复制到 str3 中 strcpy( str3, str1); cout << "strcpy( str3, str1) : " << str3 << endl; // 连接 str1 和 str2 strcat( str1, str2); cout << "strcat( str1, str2): " << str1 << endl; // 连接后 str1 的总长度 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 ; // 将 str1 复制到 str3 中 str3 = str1; cout << "str3 : " << str3 << endl; // 连接 str1 和 str2 str3 = str1 + str2; cout << "str1 + str2 : " << str3 << endl; // 连接后 str3 的总长度 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; }
Output
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; }
Output
a merry tale
遍历字符串(迭代字符串)
我们可以通过两种方式迭代字符串 -
使用循环语句
我们可以使用 for 循环、while 循环以及使用指向字符串中第一个和最后一个索引的指针执行 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> 类的对象,因此,它具有多种函数,用户可以利用它们进行各种操作。其中一些函数如下:
函数 | 描述 |
---|---|
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; }
Output
30
使用字符串 append() 方法
C++ 是一种面向对象的编程语言,因此字符串实际上是一个对象,其中包含可以对字符串执行某些操作的函数。我们可以使用 字符串 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; //在此处输入字符串 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); //在此处输入字符串 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; // >> 运算符将从 stringstream 对象读取 while (object >> newstr) { cout << newstr << " "; } return 0; }
输出
Hey, I am at TP