1. 字符串是存储在内存的连续字节的一系列字符。
c风格字符串:以空字符‘\0’结尾
int main() {
char arr[2] = {'a','b'}; //非字符串
char arr1[2] = {'a','\0'}; //字符串
cout<<arr1<<endl;
cout<<arr<<endl;
}
程序运行结果如图所示,由于arr1以‘\0’结尾,所以cout在打印时发现空字符停止,而arr由于没有空字符所以cout会一直打印直到在内存中遇到空字符停止。
字符串常量可如下初始化:
如下arr3和arr4,用此方式初始化时,该字符串隐式的包含了结尾的空字符,所以arr3长度为2.
int main() {
char arr[2] = {'a','b'};
char arr1[2] = {'a','\0'};
char arr3[2] = "a";
char arr4[] = "bn";
cout<<arr1<<endl;
cout<<arr<<endl;
}
注意:在采用字符串数组的方式初始化字符串时,需要保证数组足够大能够存储对应的字符串,在计算字符串所需的最短数组时,要将结尾的空字符计算在内。
如下程序中,sizeof(arr1)输出的是整个数组的长度,strlen(arr1)输出的是可见字符,即忽略了空字符,所以在计算字符串所需最短数组时,其值应该为strlen(arr1)+ 1.
int main() {
char arr1[2] = {'a','\0'};
cout<<sizeof(arr1)<<endl; //2
cout<<strlen(arr1)<<endl; // 1,
}
2. 字符串拼接
任意两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。 所以👇程序的结果相同。
int main() {
cout<<"I" "love"<<endl;
cout<<"I"
"love"<<endl;
}
3. C++string类
字符数组 | string | |
赋值 | 不能将一个数组赋值给另外一个数组 可以使用 strcpy(arr1,arr2) 赋值使用 char* strncpy(char* dst, const char* src, int len); //赋值超出长度时使用 | 可以将一个string对象赋值给两另一个对象 |
拼接 | strcat(arr1,arr2) //拼接 char *strncat(char *dest, const char *src, size_t n)//拼接超出长度使用 | str1+="ABC" |
长度 | strlen(arr1) | str1.size() |
初始化 | 未初始化的数组内容未定义,所以strlen(arr1) 得到的结果可能不同 | 未初始化的str对象长度自动设置为0 |
4. 其他字符串字面值
wchat_t , char16_t, char32_t, 原始(raw)字符串。
暂记,之后详细介绍~~