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++以上定义字符串内存中表示:
其实,不要把空字符的字符串常量的结尾。 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++支持多种操纵空值终止字符串的函数:
S.N. | 功能及用途 |
---|---|
1 |
strcpy(s1, s2); 复制字符串s2到字符串s1 |
2 |
strcat(s1, s2); 连接字符串s2到字符串s1的末尾 |
3 |
strlen(s1); 返回字符串s1的长度 |
4 |
strcmp(s1, s2); 返回值为0,s1和s2是相同的; 如果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++库提供了支持上述所有操作字符串类的类型,另外更多的功能。我们将C++标准库中学习,但现在让我们先来看看下面的例子:
在这一点上,你可能不理解这个例子,因为到目前为止,我们还没有讨论类和对象。不过可以继续,直到你有认识上面的面向对象的概念。
#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 lenghth of str3 after concatenation len = str3.size(); cout << "str3.size() : " << len << endl; return 0; }
当上述代码被编译和执行时,它会产生导致一些如下:
str3 : Hello str1 + str2 : HelloWorld str3.size() : 10