c++中string常用操作总结


前言:

string是C++标准库最重要的类型之一,string支持长度可变的字符串,其包含在string头文件中

#include  <string>  // 注意这里不是string.h,string.h是C字符串头文件

(1)string常用初始化操作

//声明string对象
    string s1;          
//初始化
    string s2 = "hello";         //使用字符串初始化
    string s3 = s2;              //用一个string对象初始化另一个string对象
    string s4(4, 'c');           //使用n个字符初始化
    string s5("hello", 2);       //将字符串的前n个字符赋值给s5
    string s6(s2, 2, 2);         //将s2从pos位置开始的len长度字符串赋值给s6
    string s7(s2, 2);            //将s2从pos位置开始的子串赋值给s7
    string s8(s2.begin(), s2.end()); //将s2某个区间的子串赋值给s8

(2)string增删改查

//
    s1.insert(pos, "hello");        //从pos位置起,增加char *字符串
    s2.insert(pos, s1);             //从pos位置起,增加字符串
    s2.insert(pos, n, 'c');         //从pos位置开始,增加n个字符
    s2.insert(pos, s1, pos2, len);  //从pos位置起,插入s1的从pos2开始的len长度字符串
//
    s3.erase(pos, len);                    //删除从pos位置开始的n个字符
    s3.erase(s3.begin()+1, s3.begin()+2);  //删除某个指定区间的元素
//
    s4.replace(s4.begin(), s4.end(), "hello");    //替换指定区间内的字符
    s4.replace(pos, len, "shao");                 //替换从pos位置开始的len长度的字符串
//
    int find(const string&str, int pos =0) const;    //查找str第一次出现位置,从pos开始查找
    int find(const char *s, int pos =0) const;       //查找s第一次出现位置,从pos开始查找
    int find(const char *s, int pos, int n) const;   //从pos位置开始查找s的前n个字符第一次出现位置
    int find(const char c, int pos =0) const;        //查找字符c第一次出现位置
其他:
    int rfind()                      //逆序查找,即最后一次出现的位置
    s.find_first_of(args);            //在s中查找args的任意字符的第一次出现
    s.find_last_of(args);             //在s中查找args的任意字符的最后一次出现
    s.find_first_not_of(args);        //在s中查第一个不属于args的字符
    s.find_last_not_of(args);         //在s中查找最后一一个不属于args的字符

 (3)string存取操作

    s1.at(pos)   //通过at方法获取pos位置的字符
    s1[pos]      //通过[]方法获取pos位置的字符
    区别:at会抛出越界异常

(4)string拼接

          string对象的加法被定义为拼接,如把s2追加到s1的末尾可直接用s1+=s2表达式即可。当需要string对象和字符串混合拼接时,+操作符的左右操作数中必须有一个是string对象

string    s1="hello";
string    s2="world";
string    s3=s1+",";             //合法
string    s4="hello"+",";        //非法,+号两边都没有string对象
string    s5=s1+","+"hello";     //合法,s1先和","拼接返回一个string对象,再和"hello"拼接
string    s6="hello"+","+s2;     //非法,"hello"先和","进行+操作,两个都不是string对象
 常用方法:
String& operator += (const string& str);  //string + string类型
String& operator += (const char * str);   //string + char *类型
String& operator += (const char c);       //string + char 类型
String& append(const char *s);         //把字符串s连接到当前string的结尾
String& append(const char *s, int n);  //把字符串s的前n个字符连接到当前string结尾
String& append(const string &s);       //将string连接到当前string的结尾
String& append(const string &s, int pos, int n); //把string从pos开始的n个字符连接到当前string
String& append(int n, char c);                   //在当前string结束添加n个字符c

(5)string比较

          注意:compare函数在>时返回1,<时返回-1,==时返回0

                     比较区分大小写,参考字典顺序,排越前面的越小,如A比a小

    Int compare(const string &s) const;    //与string类型比较
    Int compare(const string &s) const;    //与char *类型比较
常用方法:

s.compare(s2);           //比较s和s2

s.compare(pos1,n1,s2);   //让s中从pos1下标位置开始的n1个字符与s2做比较

s.compare(pos1,n1,s2,pos2,n2);  //让s中从pos1下标位置开始的n1个字符与s2中从pos2开始的n2个字符相比较

(6)string子串

s.substr(pos,n); //返回一个string类型的字符串,它包含从s从下标pos开始的n个字符
s.substr(pos);   //返回一个string类型的字符串,它包含从下标pos开始到s的末尾的所有字符

(7)string和c-style字符串转换

          C++提供的由C++字符串得到对应的C_string的方法是使用data()和c_str():

//string转const char *
String str = “str to cstr”;
Const char * cstr = str.c_str();

//char * 转string
Char * s = “cstr to str”;
String str(s);

注意:在C++中应坚持使用string类型进行运算,除非最后必须要转化为char*,可以用函数strcpy实现 string str = "Hello World";
int len = str.length();
char *data = new char[len+1];
strcpy(data, str.c_str());  

其他方法:

s.assign()     // 赋以新值
swap()         // 交换两个字符串的内容
s.clear()      // 删除全部字符
==,!=,<,<=,>,>=,compare()  // 比较字符串
size(),length()  // 返回字符数量,两者无区别
s.empty()        // 判断字符串是否为空
reserve()        // 保留一定量内存以容纳一定数量的字符
s.capacity()     // 返回重新分配之前的字符容量
copy()           // 将某值赋值为一个C_string
data()           // 将内容以字符数组形式返回,类型为const char *(在c++11后,等同于c_str())

 

 参考:

(1)https://www.baidu.com/link?url=SRFB1_BmZd74MUesBaVFHXvhVMfsO1IRZakze46h4BpavsOYZ5mh_rDQ-sWmgvoQmI_BdCdki9gSLS2EwUVict1hYpxZZGgFQS_YCxdHpiq&wd=&eqid=b48ebd1500151879000000035ff008ef

(2)https://www.cnblogs.com/maluning/p/8556862.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM