字符数组与字符串

1、字符数组

  • strlen(charr) 返回字符串的长度,不包含结束符\0
  • strcpy(charr1, charr2) 复制字符串,字符串charr2复制给charr1,返回charr1
  • strncpy(charr1, charr2) 将charr2前n个字符复制给charr1
  • strcat(charr1, charr2) 拼接字符串,字符串charr2拼接在charr1后面,返回charr1
  • strncat(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() 返回字符串真实长度,不包含结束符\0
  • sizeof(type)数据类型用括号 sizeof var_name 变量名可以不用括号
  • str.empty() 字符串判空,空串返回true,非空返回false
  • str1.insert(pos, str2) 在str1下标pos处插入str2
  • str.substr(pos,len) 返回一个从下标pos开始截取长度为len的字符串
  • str.erase(pos, len) 删除从下标pos开始的len个字符
  • str1.replace(pos, len, str2) 将str1中下标为pos开始的len个元素替换为str2
  • str.find(s, pos) 从str中下标为pos的位置开始查找,返回s第一次出现的下标,查找不到返回 string::npos
  • str.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);
  • 都可以使用下标来访问元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OG one.Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值