Cplusplus 简明教程
C++ Strings
C++ 提供以下两种类型字符串表示形式:
-
The C-style character string.
-
使用标准 C++ 引入的字符串类类型。
The C-Style Character String
C 语言风格字符字符串起源于 C 语言,并且在 C++ 中继续得到支持。此字符串实际上是一个字符一维数组,一个 null 字符 '\0' 终止该数组。因此,一个以 null 结尾的字符串包含组成该字符串的字符和 null 字符。
以下声明和初始化创建一个由单词 "Hello" 构成的字符串。为了在数组末尾保留一个空字符,包含字符串的字符数组的大小比单词 "Hello" 中的字符数量多一个。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
如果你遵循数组初始化规则,则可以将上述语句写成如下形式:
char greeting[] = "Hello";
以下是上面用 C/C++ 中定义的字符串的内存表述 −
实际上,无需在字符串常量的结尾处放置空字符。C++ 编译器将在初始化数组时自动在字符串结尾处放置 '\0'。我们可以尝试打印上面提到的字符串 −
Example
#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 Style String Functions
C++ 支持大量操作空终止字符串的函数。这些函数在 <string.h> header file 中定义。
Sr.No |
Function & Purpose |
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 首次出现的位置的指针。 |
Example
下面的示例使用了上面提到的几个函数 −
#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
The String Class in C++
标准 C++ 函数库提供了一个 string 类类型,支持上面提到的所有操作,另外还提供了更多功能。
Example of String Class
让我们查看以下示例 −
#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
Creating a String
我们可以使用以下方法之一创建字符串变量,以下两种方法任选 −
Creating String Using Character Arrays
我们可以使用 C-type arrays 以字符的格式声明字符串。此做法使用以下语法 −
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
Creating String using <string>
我们可以使用 'string' 关键字声明字符串变量。这包含在 <string> header file 中。声明字符串的语法如下文所述 −
string variable_name = [value];
这里,[value] 是可选的,可在声明期间用于赋值。
在以下示例中,我们声明了一个字符串变量,并为其赋值。
#include <iostream>
using namespace std;
int main() {
string s="a merry tale";
cout<<s;
return 0;
}
a merry tale
String Functions
String 是`string`类的对象,因此它具有各种函数,用户可以使用这些函数进行各种操作。其中一些功能如下:
Function |
Description |
此函数返回字符串的长度。 |
|
此函数用于交换 2 个字符串的值。 |
|
用于查找字符串的大小 |
|
此函数用于将字符串的长度调整到给定的字符数。 |
|
用于查找作为参数传递的字符串 |
|
此函数用于将字符推送到字符串的末尾 |
|
此函数用于弹出字符串中的最后一个字符 |
|
此函数用于删除字符串的所有元素。 |
|
此函数用于在字符串中搜索某个子字符串,并返回子字符串第一个字符的位置。 |
|
此函数用于用新值替换范围内等于旧值的所有元素 [first, last)。 |
|
此函数用于从给定的字符串创建一个子字符串。 |
|
此函数用于比较两个字符串,并以整数的形式返回结果。 |
|
此函数用于删除字符串的某一部分。 |
Length of a String
字串的长度就是字串中出现字符的数量。因此,“apple”这个字串的长度是 5 个字符,“hello son”这个字串的长度是 9 个字符(包括空格)。这可以使用 <string> header file 中的长度()方法访问。
String Concatenation
字符串连接是将两个字符串加在一起的一种方法。这可以使用两种方式完成 -
Addition Operator
加法运算符用于添加两个元素。对于字符串,加法运算符连接两个字符串。在以下示例中对此进行了明确解释 -
#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
Using string append() method
C++ 是一种面向对象编程语言,因此字符串实际上是一个对象,其中包含可对字符串执行某些操作的函数。我们可以使用 string append() method 将一个字符串附加到另一个字符串。
此操作的语法如下 -
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
String Input in C++
字符串可以作为程序的输入,最常见的方法是使用 cin 方法。
有三种方法可以将字符串作为输入,这些方法如下 -
-
cin
-
getline()
-
stringstream
Using cin Method
这是将字符串作为输入的最简单方法。语法如下 -
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;
}
Using getline() Method
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;
}
Using 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