c++字符串总结
目录
- 字符数组
- 字符串数组
- 字符串常量
- string类型与C-风格进行转换
- 拓展
c++中处理字符串的方式有两种,第一种是C-风格字符串(C-style string),另一种是string类库。
字符数组
定义
存储在连续字节中的一系列字符,每个字符在char数组中,且每个字符都可以被定位到。
C-风格字符串以空字符"\0"结尾,ASCII码为0,用于标记字符串的结尾。
区别
字符数组
char c[8]={'a','b','c','d','e','f','g','\0'}//长度围为8
字符指针
指向一个常量字符串或者字符数组。
char* a="abcdefg"; //不可修改的常量字符串,长度为7。
a[0] = 'H'; //不可修改a[0];
char arr[] = "hello"; // 可修改的字符数组
char *a = arr; // 字符指针指向字符数组
a[0] = 'H'; //可以修改
const char *则是指向一个常量字符串。
区别
char *不能改变a[3]的值,char c[],可以更改c[3]的值
字符串数组
const char* str[] = {"hello","world"};
const char* str[] 是一个数组,数组中的每个元素是指向常量字符的指针,字符数组str[0]是"hello",是一个char*型。
字符串常量
除了上述方法,将字符数组初始化为字符串,即使用一个双引号括起来的字符串,这种字符串被称为字符串常量
char c[8]="abcdefg";//长度为8
char d[]="abcdefg";
用引号括起的字符串隐式地包括结尾的空字符,因此不用显式地包括它
string库
string s = "1234";//长度为4;
string类型与C-风格进行转换
法1:c_str
此方法不是好方法,因为c指针指向的内容容易失效
const char *c;
string s = "1234";
c = s.c_str();
s = "abcde"; //缺点:s修改后,c也变成了"abcde"
法2:改进版,使用strcpy
char *c = new char[20];
string s = "1234";
// c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。
strcpy(c,s.c_str());
cout<<c<<endl;
s = "abcd";
拓展
字符本质
从字符的存储方式和计算机处理方式出发。
字符类型的本质是一个整数类型。每个字符都有一个对应的整数值,这个整数值实际上是它在字符编码(如ASCII、Unicode)中的编码值。
且可以使用算术和逻辑运算符,你可以对字符类型做整数运算,因为编译器会将字符解释为整数。
在 C 和 C++ 中,char 类型本质上是一个小的整数类型,通常占用 1 个字节(8 位)。这 8 位能够表示 0 到 255 的整数(无符号 unsigned char),或者 -128 到 127 的整数(有符号 signed char)。
wchar 宽字符文字量
wchar_t:每个字符占 2 或 4 字节(具体取决于平台),因此它能够表示更多的字符。一般情况下,wchar_t 采用 Unicode 编码(比如 UTF-16 或 UTF-32),可以表示几乎所有的全球字符。UTF-16 使用 2 字节存储字符(某些字符可能会使用 4 字节),UTF-32 使用 4 字节存储字符。
Unix-like 系统 上,通常使用 mbstowcs 和 wcstombs 函数进行相互转换。

浙公网安备 33010602011771号