本文默认都以vs2022编译器演示
string是c++中的一个类,以顺序表的形式存储字符串。这是一个string类型的截图
需要包含头文件string
01:string 的初始化
001:空字符串
string str;
创建一个空字符串
002:使用C语言字符串初始化。
string str("hello world");
003: 用另一个string初始化
string str(str2);
04: 传参(int,char)
字符串被初始化为i个字符c
string str(10,a);
测试
02:string的赋值操作
001:c语言字符串赋值
str ="hello world";
注意
可以看出这是一个值拷贝,而非c语言式的拷贝地址。
002: string类型赋值
str2=str1;
str2与str1内容相同
003: 单个字符赋值
str ='c';
此时str内的元素为"c" 字符串!
004: assign( char*)
str.assign("hello world");
str被初始化为hello world
005:assign(char* s,int n)
把s中前n个字符赋值
str.assign("hello wold" ,5);
注意
当n大于s 的长度时,assert会越界把str后面的数据也拷贝过来,因为str默认以'\0'结尾,cout在读到'\0'时,认为数组已经结束,故输出的是没问题的。在'\0’之后是一些无意义的随机值。在调用size或end之类函数时很可能会出现问题!!!
006:assign(string s1)
str.assign(str1);
把str1中的元素拷贝给str
007: assign(int n,char c)
str.assign(10,'a')
str中元素为10个a字符;
测试:![](https://i-blog.csdnimg.cn/blog_migrate/5ba8472b3c5a49b315f40148021da780.png)
03:常用函数
000:一些简单的函数
- begin 获取首元素地址 (用 string::iterator类型元素接收)
- clear 清空字符串
- cmpare(char*/string) 比较
- empty 判空
- end 尾元素地址
- pop_back 尾删
- push_back(char) 尾插
- size 返回字符串长度
001:追加append()
追加字符串,参数可为
1 char*字符串 ,
2 string类字符串 ,
3 char类字符 ,
4(string ,int int) 第一个string代表来源字符串,第二个源原字符串追加的起始下标第 三个代表追加的个数 。第二个int可去,代表全部拷过去
+=符号也可实现拼接
002:查找 find(),rfind ()
第一个参数为char/char*/string,第二个参数为int,代表开始查找的位置,默认为0,找到了返回下标(int类型),找不到返回 -1.
rfind从右向左找,操作与find相同。
003:替换 repleace()
参数(int,int ,char*/string)
第一个int代表开始替换的下标,第二个int代表结束替换的下标,把两个下标之间的字符串替换成第三个字符串。
004: 访问/修改 at
at(下标)访问该下标的元素
at(下标)= m 修改该下标的元素为m
其实和 [ ]用法差不多
005 :插入 insert
参数(int(下标),char*,string(插入的字符串))。
006: 删除erase
参数(int(下标),int(删除的个数))。
007:截取 substr
str=str1.substr(int(开始截取的下标),int(截取的个数)),
测试:
#include<string>
#include<iostream>
using namespace std;
int main()
{
string str1;//追加
string str2;//
string str3;//查找
string str4;//拼接
string str5;//访问&&修改
string str6;//插入
string str7;//删除
string str8;//获取子串
str1 = "hello ";
str2 = " worldxxxxxxxx";
str1.append(str2, 1,20);
cout << "str1 = " << str1 << endl;
str3 = "abcdefabcdef";
int pos2 = str3.rfind("bc", 5);
cout << pos2 << endl;
str4 = "hello world";
str4.replace(0, 0,"xxxxxxxxxxx");
cout << "str4 = " << str4 << endl;
str5 = "hello world";
str5.at(6) = 'x';
cout << "str5 = " << str5 << endl;
str6 = "hello world";
str6.insert(6, "xxxxxx");
cout << "str6 = " << str6 << endl;
str7 = "hello world";
str7 = str7.erase(5,6);
cout << "str7 = " << str7 << endl;
str8 = "hello world";
str8 = str8.substr(0, 5);
cout << "str8 = " << str8 << endl;
system("pause");
return 0;
}
04:由整数字符构成的字符串转整数
001:c_str函数
该函数会返回string中字符串的首元素地址。注意不是string的地址
002:atoi函数
atoi用于把一个由数字字符构成的字符串转成int型
类似的 atol可以转成long long类型
atof可以转成float 类型
其他:
可以使用to_string(int)把整形再转成字符串。
感谢观看
如果需要代码的话:
string.cpp · 阿巴啊巴DDDD/C_daima - 码云 - 开源中国 (gitee.com)
study_c-/string.cpp at main · ffffffffake/study_c- (github.com)