文章目录
- 1、字符数组
- 2、string类
- 2.1 基础概念
- 2.2 声明
- 2.3 输入输出
- 2.4 遍历
- 2.5 常用函数
- `size()` **获取大小**
- `length()` **获取长度**
- `empty()` **判空**
- `clear()` **清空**
- `push_back()` **尾部插入**
- `pop_back()` **尾部删除**
- `back()` **访问尾部**
- `front()` **访问头部**
- `insert()` **插入**
- `erase()` **删除**
- `substr()` **截取**
- `find()` **查找**
- `rfind` **逆序查找**
- `reverse()` **逆置**
- `to_string()` **int 转 string**
- `stoi()` **string 转 int**
- `copy()` **复制**
- 3、 字符数组和string类的区别
1、字符数组
strlen(charr)返回字符串的长度,不包含结束符\0strcpy(charr1, charr2)复制字符串,字符串charr2复制给charr1,返回charr1strncpy(charr1, charr2)将charr2前n个字符复制给charr1strcat(charr1, charr2)拼接字符串,字符串charr2拼接在charr1后面,返回charr1strncat(charr1, charr2)将字符串charr2前n个字符拼接到charr1- 注:如果添加或者复制后的charr1数组越界则会报错
strcmp(charr1,charr2)比较字符串,如果charr1>charr2 返回正整数,charr1=charr2 返回0,charr1<charr2 返回负整数strncmp(charr1,charr2)比较charr1和charr2的前n个字符
字符数组转 int
char a[100] = "123456";
int d = atoi(a);
字符数组转 `string
- 直接赋值
char a[100] = "hello";
string s = a;
- 构造函数
char a[100] = "hello world";
string str1(a); // 全部转换
string str2(a, 5); // 指定长度转换
2、string类
2.1 基础概念
在 #inlcude <string> 中使用
string不是基本数据类型,是C++中对char封装成的类。主要用于字符串处理,可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。

2.2 声明
string s; //空字符串
string s1(5, 'a'); //5个a
string s2 = "123456"; //s2为123456
2.3 输入输出
-
cin >> s;读到空格、回车、文件结束符停止 -
getline(cin, s);读入一整行 -
cout << s;输出整个字符串 -
cout << s[2];按下标输出
2.4 遍历
for(int i = 0; i < s2.size(); i++) cout << s[i] << " ";
for(auto c : s) cout << c << " ";
2.5 常用函数
str.length()/str.size()返回字符串真实长度,不包含结束符\0sizeof(type)数据类型用括号sizeof var_name变量名可以不用括号str.empty()字符串判空,空串返回true,非空返回falsestr1.insert(pos, str2)在str1下标pos处插入str2str.substr(pos,len)返回一个从下标pos开始截取长度为len的字符串str.erase(pos, len)删除从下标pos开始的len个字符str1.replace(pos, len, str2)将str1中下标为pos开始的len个元素替换为str2str.find(s, pos)从str中下标为pos的位置开始查找,返回s第一次出现的下标,查找不到返回string::nposstr.clear()清空str中的内容- string的拼接复制比较可以直接使用
+=> < >= <= != ==
size() 获取大小
语法:
s.size()
返回元素数目
length() 获取长度
语法:
s.length()
返回字符串长度, 与**size()**返回的数字相同
empty() 判空
语法:
s.empty()
若为空, 返回true, 非空返回false
clear() 清空
语法:
s.clear()
清空所有元素
push_back() 尾部插入
语法:
s.push_back©
尾部插入一个字符,可用+=代替
pop_back() 尾部删除
语法:
s.pop_back()
尾部删除一个元素
back() 访问尾部
语法:
s.back()
访问尾部元素
front() 访问头部
语法:
s.front()
访问头部第一个元素,可用s[0]代替
insert() 插入
语法:
s1.insert(pos, s2)
s1.insert(2, "bd"); //在下标2处插入bd
s1.insert (4, s2); //在下标4处插入s2
erase() 删除
语法:
s.erase(pos, num)
s.erase(pos)
s.erase(2, 4); //从下标2开始删除4个字符
s.erase(3) //从下标3开始删除后面所有字符
substr() 截取
语法:
s.substr(pos, num)
s.substr(pos)
s1 = s2.substr(1, 3); //从下标1开始截取3个字符
s1 = s2.substr(2); //从下标2开始截取整个s2
find() 查找
语法:
s1.find(s2, pos)
s1.find(s2)
查到返回下标, 查不到返回 string::npos
s1.find("3"); //查找整个s1, 返回第一次出现"3"的下标
s1.find("42", 1); //从下标1开始向后查找, 返回第一次出现"42"的下标
s1.find(s2, 3); //从下标3开始向后查找, 返回第一次出现s2的下标
rfind 逆序查找
语法:
s1.rfind(s2, pos)
s1.rfind(s2)
查到返回下标, 查不到返回 string::npos
s1.rfind("3"); //逆序查找整个s1, 返回第一次出现"3"的下标
s1.rfind("42", 1); //从下标1开始向前查找, 返回第一次出现"42"的下标
s1.rfind(s2, 3); //从下标3开始向前查找, 返回第一次出现s2的下标
reverse() 逆置
语法:
reverse(s.begin, s.end) //包含在<algorithm>中
字符串逆置
to_string() int 转 string
语法
to_string(int)
返回一个string
stoi() string 转 int
语法:
stoi(string)
返回一个int
copy() 复制
语法:
s.copy(a, num, pos)
s.copy(a, num)
char a[10];
s.copy(a, 5, 2); //从下标2开始复制5个字符到字符数组a
s.copy(a,6); //从下标0开始复制6个字符到字符数组a
3、 字符数组和string类的区别
string是一个类,string s="abcd";中的s是一个对象- 初始化方式不同
- 字符数组后面有 [] ,string类型后面没有[]
- 初始化的关键字一个是
char一个是string
char charr1[20];
char charr2[] = "Hello";
string str1;
string str2 = "Hello";
- 都可以使用
cin cout的方式进行输入输出,getline使用有区别
char charr1[20];
cin.getline(charr1,20);
string str;
getline(cin,str);
- 都可以使用下标来访问元素



2万+

被折叠的 条评论
为什么被折叠?



