C++中string的常用操作

string的常用操作

定义和初始化
string s = "hello";//拷贝初始化
string s2("hello");//直接初始化
string s3(10,'c');//直接初始化,内容是cccccccccc
读写string对象
string s1, s2;
cin >> s1;//将string对象读入s1,遇到空白停止
getline(cin,s2);//读取一行赋给s2,遇到换行符停止

可以使用while循环读取未知数量的string对象。

empty和size操作

empty函数根据string对象是否为空返回一个对应的布尔值。
size函数返回string对象的长度,即string对象中字符的个数。

比较string对象

比较运算符逐一比较string对象中的字符,并且对大小写敏感。有相等性运算符(==和!=)和关系运算符(<、<=、>、>=),如果对应位置上的字符相同,较短的小于较长的;如果在某些对应的位置上不一致,比较第一对相异字符比较的结果。

插入
string str1;
str1.push_back('a');//在str1的末尾插入字符'a'
str1.insert(str1.begin(),'a');//在指定位置前插入字符'a'

insert用法总结
(1)在index位置插入count个字符:str.insert(0,2,‘6’);
(2)在index位置插入一个常量字符串:str.insert(0,“hello”);
(3)index位置插入常量字符串中的count个字符:str.insert(0,“hello”,3);//结果就是在str前插入了hel
(4)index位置插入常量string:str.insert(0,str);//在str前插入一个str
(5)index位置插入常量str的从index_str开始的count个字符:str.insert(0,str,1,3);
(6)使用迭代器:str.insert(str.begin(),‘a’);
(7)迭代器指向的pos位置插入count个字符ch:str.insert(str.begin(),2,‘a’);

拼接
string s1("abc");
s1.append("def");
s1 += "def";
遍历

(1)下标法 for(int i = 0; i < s.size(); i++){ }
(2)正向迭代器 for(iter=s.begin();iter!=s.end();iter++){ }
(3)反向迭代器 for(riter=s.rbegin();riter!=s.rend();riter++){ }

删除erase

(1)erase(pos,n); 删除从pos开始的n个字符
(2)erase(pos); 删除pos及以后的所有字符
(3)erase(position); 删除position处的一个字符(position是个string类型的迭代器)
(4)erase(first,last); 删除从first到last之间的字符(first和last都是迭代器)

string str("hello world");
str.erase(3,4);
str.erase(str.begin());
str.erase(str.begin(),str.begin()+3);
字符替换replace

(1)replace(size_t pos, size_t n, const char s);将当前字符串从pos索引开始的n个字符,替换成字符串s,替换与被替换的字符串长度可以不相同
(2)replace(size_t pos, size_t n, size_t n1, char c); 将当前字符串从pos索引开始的n个字符,替换成n1个字符c
(3)replace(iterator i1, iterator i2, const char* s);将当前字符串[i1,i2)区间中的字符串替换为字符串s

string str = "hello world";
str.replace(0,5,"ni hao");//结果为ni hao world
查找find
string s("dog bird chicken bird cat");
s.find("chicken") // 1. 查找一个字符串,结果是:9
s.find('i',6)  // 2. 从下标为6开始找字符'i',返回找到的第一个i的下标, 结果是:11
s.rfind("chicken")  // 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标,结果是:9
s.rfind('i') // 4. 从字符串的末尾开始查找字符,结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符
cout << (s.find('i')==s.npos) << endl;//判断是否找到,如果s.find('i')==s.npos,表示没有找到。

npos表示一个常数,表示size_t的最大值,string的find函数如果未找到指定字符,返回的就是一个npos

排序sort

需要头文件< algorithm>,默认为升序

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

bool cmp(char a, char b){
    
    
    return a > b;
}

int main(){
    
    
    string str = "hello world";
    sort(str.begin(),str.end());//升序
    sort(str.begin(),str.end(),cmp);//降序
    cout << str << endl;
    return 0;
}

截取substr
string str("hello world");
string s1 = str.substr(3);//从下标3开始至结束
string s2 = str.substr(3,3);//从下标3开始,截取3个字符
string与数字的相互转换

数字转string:std命令空间下有一个C++标准库函数std::to_string(),可用于将数值类型转换为string。使用时需要include头文件< string>。
string转数字:使用C++11引入的C++库函数将string转换为数值类型,相应的库函数申明于头文件< cstdlib>中。
在这里插入图片描述
形参说明:
str:重载了string和wstring版本,表示被转换的字符串。
idx:表示一个size_t*的指针类型,默认为空值。不为空时,转换成功时获取第一个非数值字符的下标。一般情况下,因为它是直接char型指针把最后非数值字符的地址值和起始地址值相减,所以也表示成功转换的字符数量,如”10”转成功为数值10时,*idx的值为2。
base:表示转换基准,默认是10进制。

猜你喜欢

转载自blog.csdn.net/qq_42820853/article/details/106709110