一.知识点总结
1. C风格字符串(字符数组)
- 字符数组存储字符串:C风格的字符串实际上是字符数组,以空字符
'\0'
作为结尾标志。 - 字符串字面量与字符数组:字符串字面量如
"Hello"
被编译器视为const char*
类型,可以直接赋值给指向char
的指针或字符数组。 - 初始化字符数组:可以通过初始化列表或字符串字面量初始化字符数组,后者会在数组末尾自动添加
'\0'
。
2. C++标准库std::string
类
- 字符串对象声明:
std::string
类提供了一种更安全、更灵活的方式来处理字符串。 - 字符串操作:
std::string
类提供了丰富的成员函数来操作字符串,如append
, assign
, compare
, insert
, substr
, find
, length
, 和 swap
。 append
:在字符串末尾添加另一个字符串或字符序列。assign
:将字符串的内容替换为一个新的字符串或字符序列。compare
:比较两个字符串,返回值指示了字符串的字典序关系。insert
:在指定位置插入新的字符串或字符序列。substr
:提取字符串的一部分,返回子字符串。find
:搜索字符串中首次出现的字符或子字符串的位置。length
:返回字符串的长度(不包括结尾的'\0'
)。swap
:交换两个std::string
对象的内容。
3. 字符串的输出与访问
- 输出字符串:无论是C风格字符串还是
std::string
对象,都可以直接使用cout
进行输出。 - 访问字符串元素:
std::string
对象支持通过索引访问单个字符,如str[i]
。
4. 注意事项
- 字符串字面量和数组初始化:在C++中,不能使用初始化列表
int* INT = {1,2,3};
来初始化指针,因为这违反了C++的规则,不同于字符数组的初始化。 - 字符串常量与指针:字符串字面量被编译器视为
const char*
,这意味着你不能修改字符串字面量中的字符。
二.详细注释代码
//与C语言一样,C++的基本数据类型变量中没有字符串变量
#include<iostream>
#include<string>
using namespace std;int main() {//字符数组储存(较繁琐)//字符串常量赋给字符串指针//一个字符串常量表示一个字符数组的首地址const char* STRING1 = "HEllo WOrld";//直接输出cout << STRING1 << endl;//错误int* INT = {1,2,3};//三种等价初始化格式char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};char str2[6] = "Hello";//末尾隐含有'\0'char str3[] = "World";//string类//常用成员函数const char* s = "EXO";string a = "Hello";string b = "World~";cout << "a : " << a << " b : " << b << " s : " << s << endl;//添加在串尾a.append(s);cout << "a.append(s) : " << a << endl;//赋值a.assign(s);cout << "a.assign(s) : " << a << endl;//比较大小,本串 较小返回负数,较大返回正数,否则返回0cout << "a.compare(s) : " << a.compare(s) << endl;cout << "a.compare(b) : " << a.compare(b) << endl;//s串插在整数对应下标之前a.insert(2, s);cout << "a.insert(2, s) : " << a << endl;a.insert(4, s);cout << "a.insert(4, s) : " << a << endl;//从第一个位置取第二个位置的个数返回新串(取子串)string c = a.substr(2, 3);cout << "c = a.substr(2, 3) : " << c << endl;//查找第一次出现的位置cout << "a.find('O') : " << a.find('O') << endl;cout << "a.find(c) : " << a.find(c) << endl;//返回串长度cout << "a.length() : " << a.length() << endl;//将本串与其进行交换cout << "a: " << a << " b: " << b << endl;cout << "a.swap(b) : " << endl;a.swap(b);cout << "a: " << a << " b: " << b << endl;}
三.输出
HEllo WOrld
a : Hello b : World~ s : EXO
a.append(s) : HelloEXO
a.assign(s) : EXO
a.compare(s) : 0
a.compare(b) : -1
a.insert(2, s) : EXEXOO
a.insert(4, s) : EXEXEXOOO
c = a.substr(2, 3) : EXE
a.find('O') : 6
a.find(c) : 0
a.length() : 9
a: EXEXEXOOO b: World~
a.swap(b) :
a: World~ b: EXEXEXOOO