C++ STL中string的详细总结

网友投稿 448 2022-11-01


C++ STL中string的详细总结

文章目录

​​一、string的构造函数的形式​​​​二、 string的大小和容量​​​​三、string的字符串比较​​

​​注:可以就看到,当strcmp()按照字典序比较,返回值>=0时,算数运算符的比较结果为0;返回值<0时,算数运算符的比较结果为1;​​

​​四、string的插入(针对char)​​​​五、string拼接字符串(针对string)​​​​六、 string的遍历​​​​七、string的删除​​​​八、 string的字符替换​​

​​string& replace(size_t pos, size_t n, const char *s);​​​​string& replace(size_t pos, size_t n1, size_t n2, char c);​​​​string& replace(iterator iter1, iterator iter2, const char* s);​​

​​九、字符串的分割和截取​​​​十、大小写转换​​​​十一、字符串排序​​

一、string的构造函数的形式

//生成空字符串 string(); //生成字符串str的复制品 string(const string& str); string(const char* s); //将字符串str中始于begin、长度为len的部分作为字符串初值,若越界则复制到字符串末尾就截至 string(const string& str, size_t begin, size_t len); string(const char* s, size_t begin, size_t len); //从begin_pos开始往后复制,包括begin_pos string(const string& str, size_t begin_pos); //从开头复制到end_pos,不包括end_pos string(const char* s, size_t end_pos); //复制n个c形成一个字符串 string(size_t n, char c);

实例:

void construct(){ string str1; //生成空字符串 string temp = "123456789"; string str2(temp); string str3("123456789"); string str4(temp, 2, 4);//"3456" string str5("123456789", 2, 4);//"3456" string str6(temp, 2);//3456789 string str7("123456789", 2);//12 string str8(5, '1');//"11111" cout<<"str1="<0返回1,<0返回-1,相同返回0 //"aBcdef"和"AbcdEf"比较 int res1 = str1.compare(str2); //"Bcdef"和"AbcdEf"的比较,其中1表示下标索引,5表示长度 int res2 = str1.compare(1,5,str2); //"Bcdef"和"Ef"的比较,其中4表示下标索引,2表示长度 int res3 = str1.compare(1,5,str2,4,2); //"123"和"123"的比较 int res4 = str3.compare(0,3,str4,0,3); cout<<"res1="< "1";//0 cout< "5";//0 cout< "9";//1 cout<

运行结果:

注:通过结果可以看到不管是append还是直接通过 连接,字符串的地址都不变,可知并不是重新生成了一个新的对象,而是直接在内存空间里修改的

六、 string的遍历

索引方式或迭代器都能实现遍历

void str_traverse(){ string str("123456"); //索引法一 for(int i=0; i

运行结果:

七、string的删除

1、从给定起始位置pos处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用basic_string & erase(size_type pos=0, size_type n=npos); 示例:

= "0123456789"; // 从位置pos=5处开始删除,包括位置5,直到结尾,剩余01234 str1.erase(5); cout<

运行结果:

2、删除迭代器位置处的单个字符, 并返回下个元素的迭代器

iterator erase(const_iterator position)

示例:

= "0123456789"; // 删除str初始位置的字符 str.erase(str.begin()); cout<

3、删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器iterator erase(const_iterator first, const_iterator last)

// 删除str从位置5开始,包括位置5,到末尾的所有字符,剩余01234 string str = "0123456789"; str.erase(str.begin()+5, str.end()); cout<

4、删除string中最后一个的字符pop_back()

string str = "1234";str.pop_back();//剩余123,新特性,若报错,则要更新MinGW

八、 string的字符替换

1、 将当前字符串从pos索引开始的n个字符,替换成字符串s

string& replace(size_t pos, size_t n, const char *s);

2、将当前字符串从pos索引开始的n1个字符,包括第n1个字符,替换成n2个字符c

string& replace(size_t pos, size_t n1, size_t n2, char c);

3、将当前字符串[iter1,iter2)区间中的字符串替换为字符串s

string& replace(iterator iter1, iterator iter2, const char* s);

void str_replace(){ string str1 = "0123456789"; // string& replace(size_t pos, size_t n, const char *s) str1.replace(6, 5, "haha"); //012345haha cout<

运行结果:

九、字符串的分割和截取

分割函数: char *strtok(char *s,const char *delim)

功能:分解字符串为一组字符串,s为要分解的字符串,delim为分隔字符串

分析:strtok()用来将字符串分割成一个个片段,参数s指向将要被分隔的字符串,参数delim则为分隔字符串。当strtok()在参数s的字符串中发现到参数delim的分隔字符时,则会将该字符改为’\0’字符。在第一次调用时,strtok()必须给予参数s字符串,往后的调用则将参数s设置成NULL,每次调用成功则返回被分隔片段的指针

void str_tok_sub(){ char str[] = "I,am,from,shannxi.as a C programmer!"; const char *split = ", .!"; //在第一次调用时,strtok()必须给予参数s字符串 char *p2 = strtok(str,split); while( p2 != NULL ) { cout<

运行结果:

截取:

1、str字符串begin的位置开始截取到str末尾,包括位置begin

string str.substr(size_t begin)

2、从str字符串begin位置开始截取len个字符,包括位置begin,若越界则截取到str末尾

string str.substr(size_t begin, size_t len)

str2("0123456789"); string res1 = str2.substr(5); //56789 string res2 = str2.substr(1,5); //12345 cout<

注:截取操作不改变原字符串

十、大小写转换

tolower()和toupper()

void str_trans(){ string str = "ABCDE"; for( int i = 0; i < str.size(); i ) str[i] = tolower(str[i]); cout<

运行结果:

十一、字符串排序

最后一个了,比较简单,直接给代码吧

void str_sort(){ string str("9128765340"); sort(str.begin(), str.end());//按照字典序排序 cout<

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:numpy简单笔记
下一篇:堆排序详解(附可运行代码)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~