字符串就是字符的集合,在C++中默认的编码格式是ASCII码。
举个例子
#include <iostream>
int main() {
char name[] = "InfiHeart";
std::cout << name << std::endl;
std::cin.get();
}
定义上述字符串并打开内存视图
可以发现以字节形式存储的字符串数据。在字符串末尾存在00
,这个空字符的存在是为了告诉电脑,字符串在何时结束。 为了实验上述说法,换个方式定义字符串
#include <iostream>
int main() {
char name[] = "InfiHeart";
char name2[9] = {'I', 'n', 'f', 'i', 'H', 'e', 'a', 'r', 't'};
std::cout << name2 << std::endl;
std::cin.get();
}
逐个字符定义后运行
可以发现由于少了用于提示终止的空字符,在内容外打印出了一堆乱码
将定义改写为char name2[10] = {'I', 'n', 'f', 'i', 'H', 'e', 'a', 'r', 't', 0};
便可以正常显示。
如何使用字符串
C++的标准库中提供了std::string
,此外还存在一个模板类basic_string
,前者实际上就是后者的模板类实例,这种形式叫做模板特化(template specialization)。意为把char
作为模板类basic_string
的模板参数,即char
就是每个字符背后的数据类型。
std::string
是C++中推荐使用的字符串方法,本质上就是char
数组和一些内置函数。使用标准库中的写法修改代码
#include <iostream>
int main() {
std::string name = "InfiHeart";
std::cout << name << std::endl;
std::cin.get();
}
值得一提的是,C++中""
中的字符串,默认为const
类型。std::string
有个接受参数为char
指针或const char
指针的构造函数, 如果尝试std::string name ="InfiHeart" + "Hello!";
则会出现报错,因为这是在将两个const char
数组相加,或者说将两个指针相加,它们并不是string
类型。可以尝试换行写name += "Hello!"
,即将一个指针加到了string
类的name
上,然后+=
操作符在string
类中被重载了,所以支持这种操作。 或者是显式的调用string
构造函数将其中一个传入string
构造函数中std::string name =std::string("InfiHeart") + "Hello!";
,这会带来额外的字符串拷贝,但通常问题不大。
教程来源:The Cherno C++ 教程