String使用技巧
关于一些使用的技巧,在上机的时候关于字符串的题目一般还是比较多的,其实做了一些题,感觉字符串用不好的根本原因还是在一些库函数没有真正的了解,思维固然重要,但是有的时候方法就摆在那,但是不知道就很颓,所以大道至简还是基础的问题,总结就是为了发现不足弥补不足,纯干活输出。
一、输入的一些技巧
- 单个字符串的输入输出
string str;
cin>>str;
cout<<str<<endl;
- 循环输入多个字符串
string str;
vector<string>res;
while(cin>>str){
if(str=="00"){
break;
}
res.push_back(str);
}
二、字符串的排序
- 按照字典排序
string s;
sort(s.begin(),s.end());
- 自定义排序(按照长度排序)
bool cmp(string s1,string s2){
return s1.length()<s2.length();
}
string s;
vector<string>res;
sort(res.begin(),res.end(),cmp);
三、截取特定的字符串
- 一串字符串,要求能识别串中的空格、逗号、句号,并将串中的单词出现的次数保存最后输出。
int st=-1,ed=-1;//标记开始位置
int flag = 0//表示是否开始记录单词
string s,s1;
getline(cin,s);
for(int i=0;i<s.length();i++){
if(flag==0){
if(s[i]>='a'&&s[i]<='z' || s[i]>='A'&&s[i]<='Z'){
flag=1;//表示已经开始标记了
st=i;//表示已经开始标记的位置
}
}else if(flag==1){
if(s[i]==' '||s[i]==','|| s[i]='.'){
ed=i;
s1=s.substr(st,ed-st);//表示从第一个标记位置st开始,到第一个特殊字符出现位置之间的字符串给s1,也就是一个单词.
a[s1]++;
flag=0;//进行下一个单词的标记
st=-1//开始位置标记为-1
}
}
}
if(st!=-1){//最后一个还是单词的话,在len