string类的增删改查比分转 常用最基本操作
1、创建和插入
- 创建 string s="study hard and make progress everyday! every day!!
- 插入 s2.insert(positon, string);//插入位置(0开始), 插入字符串s3.append(string, startPosition,endPosition);//尾部插入字符串,被插入字符串的起始和终止位置,后两个参数可以省略
2、删除
- 子串删除 s.erase(3,3);//删除起始位置,删除子串长度
- 子串截取 s.substr(0,5); //截取起始位置,截取子串长度
3、查找
- 索引查找 s[0];
- 根据字符串查找 s3 = "AAABBBAAABBB";
- 查找首个 int a = s3.find_first_of("BBB");//返回第一个字符串第一个字母位置 a=3
- 查找最后一个 int b = s3.find_last_of("BBB");//返回最后一个 字符串
- 最后一个字母位置 b=11 从某处开始查找 int c1 = s3.find("BBB",0);// c1 = 3
int c2 = s3.find("BBB",5);// c2 = 9
- 查找所有
flag="a";
position=0;
int i=1;
while((position=s.find(flag,position))!=string::npos)
{
cout<<"position "<<i<<" : "<<position<<endl;
position++;
i++;
}
4、替换
string line = "this@ is@ a test string!";
line = line.replace(line.find("@"), 1, ""); //从第一个@位置替换第一个@为空 数字为第i个
string line = "this@ is@ a test string!";
line = line.replace(line.begin(), line.begin()+6, ""); //用str替换从begin位置开始的6个字符
5、比较
- 特殊符号
string::npos 查找时判断结束
字符串为空 s.empty() s.size() == 0 s==""
- 字符串比较
s.compare(s2); //相等返回0,s<s2返回-1,s>s2返回1
参考 https://blog.csdn.net/zcc1229936385/article/details/79747371
6、分割
void SplitString(const string& s, vector<string>& v, const string& c) //被分割字符串,返回数组,分割字符
{
string::size_type pos1, pos2;
pos2 = s.find(c);
pos1 = 0;
while(string::npos != pos2)
{
v.push_back(s.substr(pos1, pos2-pos1));
pos1 = pos2 + c.size();
pos2 = s.find(c, pos1);
}
if(pos1 != s.length())
v.push_back(s.substr(pos1));
}
参考 https://www.cnblogs.com/carsonzhu/p/5859552.html
7、类型转换
double dVal;
int iVal;
string str;
stringstream ss;
// string -> double
str = "123.456789";
ss << str;
ss >> dVal;
cout << "dVal: " << dVal << endl;
// string -> int
str = "654321";
ss.clear();
ss << str;
ss >> iVal;
cout << "iVal: " << iVal << endl;
参考 https://blog.csdn.net/hanjing_csdn/article/details/79922660