【C++详解】字符串

1. C++字符串分类

在C++中,有两种类型的字符串表示形式:① C风格字符串;② C++引入的string字符串。在C++程序中最好不要使用C风格字符串,不仅使用不方便,而且极易引发程序漏洞

2. C风格字符串

  • C风格字符串不是一种类型,实际上是使用空(null)字符'\0'结尾的一维字符数组char s[6]={'H','e','l','l','o','\0'},实际使用中C++编译器会在初始化数组时自动把'\0'放在字符串末尾char s[]="Hello",操作C风格字符串时实际操作的是数组指针
  • C++在cstring头文件中提供了操作C风格字符串的函数:① strcpy(s1,s2):拷贝s2到s1,返回s1;② strcat(s1,s2):连接s2到s1的末尾,返回s1;③ strlen(s1):返回s1的长度,遇到空字符会截断;④ strcmp(s1,s2):比较s1与s2,相等返回0,大于返回正,小于返回负;⑤ strchr(s1,ch):返回一个指针,指向s1中字符ch的第一次出现的位置;⑥ strstr(s1,s2):返回一个指针,指向s1中s2的第一次出现的位置
  • 字符串常量值"aaa"的类型是const char[],可以直接赋值给const char*类型变量,但不能将其直接赋值给char*类型变量(有些编译器可以赋值但要避免这样使用),需要使用强制类型转换const_cast<char*>("bbb")。将字符串常量直接赋值给char[]类型实际上在内部作了逐个赋值操作

3. C++风格字符串

  • string是C++类库中的一个类,存在于名称空间using std::string中,使用时需要导入类库#include<string>。如果使用=初始化一个变量,执行的是拷贝初始化string s="aaa",如果不使用等号,则执行的是直接初始化string s("aaa")
  • string类型字符串支持C风格字符串的所有操作,此外还增加了更多功能:① s.empty():判断string是否为空;② s.size(),s.length():返回string字符个数,返回值是一个无符号整型(size_type),不能与int进行比较;③ s1+s2:返回s1和s2连接后的结果;④ s1==s2,s1!=s2:返回s1和s2是否相等;⑤ <,<=,>,>=:比较字符串大小;⑥ s1.append(s2):在末尾添加字符串;⑦ s1.find(s2):在s1中查找s2位置;⑧ s1.insert(n,s2):在位置n处插入字符串;⑨ s1.replace(n1,n2,s2):将位置n1到n2间的字符串替换为s2;⑩ s.substr(n,m):返回位置n处长度为m的子字符串
  • string类型字符串的所有双目操作符可以与C风格字符串混用,若返回值为字符串类型,则返回string类型字符串,若返回值为整型,则返回size_type类型,要定义该类型的变量需要使用string::size_type x=1

4. 字符串类型转换

  • C风格字符串可以直接转为string字符串,反过来string对象要通过c_str()成员函数才能转为const char*类型。如果后续操作改变了string对象的值,c_str()返回的数组会失效,如果执行完该函数后想一直使用其返回的数组,最好将数组重新拷贝一份
  • C++中要将string对象转为char[]类型时,首先用c_str()成员函数转为const char*,再用strcpy_s(s1,s2)函数进行拷贝,该函数相较于strcpy()而言可以保证有效的缓冲区尺寸,避免不可预料的行为
  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值