一、用法总结
1.返回字符串长度,size(),length()都行
2.substr(i,j),截取下标为i的字符串往后一共长度为j位
3.清空字符串,clear()
4.str.find(str2),当str2是str的子串时,返回str中匹配的第一个字符的下标
5.翻转字符串,reverse(迭代器,迭代器),例如reverse(str.begin(),str.end()),左闭右开
6.删除,有三种
~删除单个字符,erase(it),it为迭代器
~删除区间字符,erase(it,it2)it,it2为迭代器,左闭右开
~删除区间字符,erase(pos,length),pos为删除字符串起始位置,length为要删除的字符长度
7.插入字符串,insert(pos,string),从pos位置插入string字符串
二、题目总结
nefu 31 字符串合并
#include<bits/stdc++.h>
using namespace std;
string a,b,c;
int main()
{
while(cin>>a>>b){
c=a+b;
cout<<c<<endl;
}
return 0;
}
nefu 1019 strange string
我是用栈做,所以最后还要考虑前面的字符和后面的字符不相同
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s1;
while(cin>>s1)
{
stack<char>vis;
for(int i=0;i<s1.size();i++)
{
if(vis.empty())vis.push(s1[i]);
else
{
char ch=vis.top();
if(ch!=s1[i])vis.push(s1[i]);
}
}
if(vis.size()==3)//题目要求三个字母两两不同,所以还要判断第1 3个是否相同
{
char ch=vis.top();
vis.pop();
vis.pop();
if(ch==vis.top())cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
return 0;
}
poj 1580 String Matching
#include<bits/stdc++.h>
using namespace std;
string a,b,c;
int main()
{
int n,m;
while(cin>>a&&a!="-1")
{
cin>>b;
int flag=0;
int cnt=0,mcnt=0;
int n=a.length();
int m=b.length();
for(int j=-(m-1);j<n;j++){
cnt=0;
for(int i=0;i<m;i++)
{
if(i+j>=n)continue;
if(i+j<0)continue;
if(a[i+j]==b[i])cnt+=2;
}
if(mcnt<cnt){mcnt=cnt;}
}
int cnt0=n+m;
int m0=__gcd(cnt0,mcnt);
c="appx("+a+","+b+") = ";
cout<<c;
if(mcnt==0)printf("0\n");
else if(cnt0==mcnt)printf("1\n");
else printf("%d/%d\n",mcnt/m0,cnt0/m0);
}
return 0;
}