//长字符串划分小字符串
#include <sstream>
string str = "sad ons saa";
stringstream ss(str); //用str初始化string流
//将ss流中的数据以string形式送入str,遇到' '就完成一次传送
//str原先内容会完全被覆盖,即使原先字符串比较长
while(ss >> str)
{
cout << str << endl;
//sad
//ons
//saa
}
//字符串删除某种字符
string str = "asod nasd_onsa";
for(auto it = str.begin() ; it != str.end() ;)
{
if(*it == 'a')
str.erase(it); //erase删除迭代器所指元素,返回下一个有效迭代器,
//相当于++了
else it++;
}
//处理后str == "sod nsd_ons"
//删除最后一个字符
str = "asld";
str.pop_back(); //法一
str.erase(str.end()-1); // 法二
str.erase(str.end()-3,str.end() ); //会将sld删除
//替换
// 将str从开始往后两个字符替换成“string”
string str = "abcdefg";
str.replace(str.begin() , str.begin()+2 , "string" ); //stringcdefg
str.replace(0,2,"string"); //等效
//类型转换
#include<string>
#include<sstream>
#include<iomanip>
double a = 9.04;
string s = to_string(a); // s == "9.040000" 默认六位小数,多出的话四舍五入
double d = 3.1415926535897932384;
stringstream ss;
ss << setprecision(15) << d; //保留15位有效数字,小数点后有14位
//string流转string
s = ss.str(); //使用完这个方法要clear,然后插入其他值才能转其他类型
ss.clear();
//另一种方法
ss >> s;
string s1 = "32";
int a = stoi(s1); //a == 32
// stod 转double
//stof 转float
// stold 转long double
//stoll 转long long
//遇到非法输入会截取合法部分 如"32ab2" 那只截取32
//查找子串
string s = "oasmfaslf";
s.find("as"); //返回字符串第一次出现的下标 1
s.find("asdd"); //找不到返回一个很大的数4294967295 这个数是常量npos
if(s.find("losad") == s.npos)
cout << "找不到" << endl;
//截取字串
string s = "aoncaoa,a@pamc.c";
string str = s.substr(); //不传参数,相当于从0开始拷贝 aoncaoa,a@pamc.c
string s1 = s.substr(0,4); //从0开始拷贝4个字符 aonc
string s2 = s.substr(2,3); //从2开始拷贝3个字符 nca
string s3 = s.substr(3); //从3开始之后全部拷贝 caoa,a@pamc.c
string s4 = s.substr(s.find('@') , 2); //find找到@的开始下标9,从这个下标开始拷贝2字符 @p
//大小写转换
#include <algorithm>
char c = 'a';
char ch = toupper(c); // A
char ch1 = tolower(ch); // a
string str = "ONSJansd";
transform(str.begin() , str.end(), str.begin() , ::toupper); // str == ONSJANSD
transform(str.begin() , str.end(), str.begin() , ::tolower); // str == onsjansd
//transform(容器首迭代器,容器尾迭代器,结果容器首迭代器,函数 )
//前两个参数确定了要操作容器的区间,第三个参数指定操作结果放到哪,
// 第四个参数为函数名,指定元素如何操作,可以自定义
char myupper (char c)
{
if('a' <= c && c <= 'z')
c -= 32;
return c;
}
transform(str.begin() , str.end(), str.begin() , myupper);
//字符串拼接
//在字符串的末尾添加str,
//在字符串的末尾添加str的子串,子串以index索引开始,长度为len
//(省略len则加到末尾为止)
//在字符串的末尾添加num个字符ch,
//在字符串的末尾添加以迭代器start和end表示的字符序列
string str1 = "I like C++";
string str2 = ",I like the world.";
string str3 = "Hello";
string str4 = "Hi";
string str5;
string str6;
str1.append(str2); //I like C++,I like the world.
str3.append(str2, 11, 7); //Hello World.
str4.append(5, '.'); //Hi.....
str5.append(str4.begin(), str4.begin() + 3); // Hi.
str6.append(str1, 3); // ike C++,I like the world.