string、cstring、string.h区别
string :c++的字符串库,std:string str();
string.h : c中的字符串库
cstring :c++中c风格的字符串库,基于string.h为c++定制的;
string 和 cstring 都在在std命名空间中
1. string
string
结尾没有'\0'
;c语言中的const char* 是以‘’\0‘’
结尾;
string
常和流文件结合处理。
1.1基本操作
#include<string>
string str1;
string str2("123456789");
string str3("12345", 0, 3);
string str5(5, '2');
string str6(str2, 2,5);结果为"34567" 从2开始长度为5
全参数。
s.size()
s.capacity();
s.max_size();
s[];
str2=str2+str3;
str2+=str3;
str2=str3;
string str8 =str3;
支持string
与C-string
的比较(如 str < "hello"
)
在使用>,>=,<,<=
这些操作符的时候是根据当前字符特性将字符按字典顺序进行逐一比较。字典排序靠前的字符小, 比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)。
1.2类型转换
| |
---|
s.c_str() | string->char |
stoi() | string->int |
atoi() | char->int |
1.3 大小写转换、替换
tolower(s[i]) | 转换为小写 |
---|
toupper(s[i]) | 转换为大写 |
s.replace(pos,n,str) | pos开始的n个字符替换为字符串str |
s.replace(pos,n,n1,c) | pos开始的n个字符替换为n1个字符c |
s.replace(it1,it2,str) | [it1,it2)区间替换为str ,it为迭代器 |
1.4插入、删除、分割
s.substr(pos,n) | 截取从pos索引开始的n个字符 |
---|
erase(iterator first, iterator last) | [first,last) |
erase(pos, len) | 删除[pos,pos+len-1] |
s.push_back(‘a’) | |
s.append(“abc”) | 尾部插入 |
s.insert(s.begin(),‘1’) | 迭代器插入 |
| |
1.5 查找
s.find (“abc”, 2 ) | 返回pos,支持字符串和字符,从s[2]开始查子串位置 |
---|
rfind | 反向 |
find_first_of | 查找含有子串s的字符 |
find_first_not_of | 查找子串s没有字符 |
find_last_of | 查找最后一个位于子串s的字符 |
find_last_not_of | |
#include<algorithm>
string s("string")
auto pos = std::find(s.begin()+l,s.end(),'i');
s.end()==pos ? return false; : return true;
2.cstring
2.1 函数
3 字符分类<cctype>
isalnum(c) | 测试 c 是否字母或数字 |
---|
isalpha | 是否字母 |
isascll | 是否 ASCII 字符 |
iscntrl | 是否控制字符(0x00~0xlF 或0x7F) |
iscsym | 是否字母、下划线或数字 |
iscsymf | 是否字母或下划线 |
isdigit | 是否十进制数字 |
isgraph | 是否空格外的可打印字符 |
islower/isupper | 是否小写/大写字母 |
isprint | 是否可打印字符包括空格字符(0x20~0x7E) |
ispunct | 是否标点符号 |
isspace | 空白字符(0x09~0x0D 或0x20) |
isxdigit | 十六进制数字(A~F,a~f 或0~9) |
C-style字符串常用函数实现
MyString 类实现
- 基本构造函数、析构
- +,=,+=,<<符号重载;
- 迭代器