C++字符串
C++提供了两种类型的字符串表示形式:
- C风格字符串
- C++引入的string类类型
C风格字符串
C风格的字符串源于C语言,并在C++中继续得到支持。字符串实际上是使用Null字符终止的一堆字符数组。因此一个以NULL结尾的字符串,包含了组成字符串的字符。
下面的声明和初始化创建了一个“Hello”字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词“Hello”的字符数多了一个。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', ''};
,按照数组初始化规则,可以把语句写为char greeting[] = "Hello";
。以下是C/C++中定义的字符串的内存表示:
其实,不需要把NULL字符放在字符串常量的末尾。C++编译器在初始化数组时,自动把''放在字符串的末尾。
实例:
#include<iostream>
using namespace std;
int main(){
char greeting[] = {'H', 'e','l','l','o','\0'};
cout<<"greeting message:";
cout<<greeting<<endl;
return 0;
}
结果显示:
C++中有大量的函数用来操作以NULL结尾的字符串:
函数 | 作用 |
---|---|
strcpy(s1,s2) | 复制字符串s2到字符串s1 |
strcat(s1, s2) | 连接字符串s2到s1的末尾 |
strlen(s1) | 返回字符串s1的长度 |
strcmp(s1, s2) | 比较字符串s1和字符串s2,如果相同返回0,如果s1<s2返回<0;如果s1>s2返回>0 |
strchr(s1, ch) | 返回一个指针,指向字符串s1中字符ch的第一次出现的位置 |
strstr(s1, s2) | 返回一个指针,指向字符串s1中字符串s2的第一次出现的位置 |
实例:
#include<iostream>
using namespace std;
int main(){
char str1[11] = "Hello";
char str2[11] = "World";
char str3[11];
int len;
//复制str1到str3
strcpy(str3,str1);
cout<<"strcpy(str3,str1):"<<str3<<endl;
//连接str1和str2
strcat(str2, str1);
cout<<"strcat(str2, str1):"<<str2<<endl;
//连接后str2的总长
len = strlen(str2);
cout<<"strlen(str2):"<<len<<endl;
return 0;
}
结果输出:
C++中的String类
C++标准库提供了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;
}
结果显示: