蓝桥杯字符串常用操作及算法总结
·getline()一次读取一行:当需要对字符串进行保存的时候,一般会建一个字符串用来保存。
vector<string> str;
string s;
getline(cin,s);
str.push_back(s);
这里也可以用set,set内部会默认进行排序
set<string> str;
·当想要遍历保存的字符串的时候,可以利用迭代器
vector<string>::const_iterator first;
first = str.begin();
for(;first!=str.end();first++)
·利用好C++中的algorithm.h
·将字符串中的字符全部转换为大写或小写
transform(a.begin(),a.end(),a.begin(),::toupper);//全部转换为大写
transform(a.begin(),a.end(),a.begin(),::tolower);//全部转化为小写
·回文问题的解决
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
int j = n-1;
int cnt = 0;
int flag = 0;
for(int i=0;i<j;i++)
{
for(int k=j;k>=i;k--)
{
if(k==i)
{
if(n%2==0||flag==1)
{
cout<<"Impossible";
return 0;
}
flag = 1;
cnt += n/2-i;
}
else if(s[k]==s[i])
{
for(int l=k;l<j;l++)
{
swap(s[l],s[l+1]);
cnt++;
}
j--;
break;
}
}
}
cout<<cnt;
return 0;
}
·字符串的插入、删除、替换操作
拿一个例题来看:
从键盘输入一个字符串(长度< =40个字符),并以字符’.’结束。编辑功能有:
- D:删除一个字符,命令的方式为:D a 其中a为被删除的字符,例如:D s 表示删除字符’s’,若字符串中有多个 ‘s’,则删除第一次出现的。
- I:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。例如:I s d 表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有多个 ‘s’,则插入在最后一个字符的前面。
- R:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。
在编辑过程中,若出现被改的字符不存在时,则给出提示信息。
思路:
·用getline()来读取第一行字符串
·判断第二行第一个字符属于什么
·删除操作,利用find()函数找到后运用erase()
·插入操作,这里涉及到插入到最后一个之前,所以遍历目标字符串,取出最后一个的地址,使用insert()
·替换操作,同样是遍历,只要碰到便replace()
#include <bits/stdc++.h>//万能头文件
using namespace std;
int main()
{
string s;
string a,b,c;
int i;
getline(cin,s);//读取第一行
cin>>a;
int pos;
int n;
int m=0;
if(a == "D")
{
cin>>b;
if(s.find(b[0]) == s.npos)//判断是否找到
{
cout<<"404 not found"<<endl;
//system("pause");
return 0;
}
pos = s.find(b[0]);
n = b.size();
s = s.erase(pos,n);
}
else if(a == "I")
{
cin>>b;
cin>>c;
for(i=0;i<s.size();i++)//遍历字符串
{
if(s[i] == b[0])
{
m = 1;
pos = i;
}
}
if(m == 0)
{
cout<<"404 not found"<<endl;
//system("pause");
return 0;
}
s = s.insert(pos,c);
}
else if(a == "R")
{
cin>>b;
cin>>c;
for(i=0;i<s.size();i++)
{
if(s[i] == b[0])
{
m=1;
pos = i;
s = s.replace(pos,1,c);
}
}
if(m == 0)
{
cout<<"404 not found"<<endl;
//system("pause");
return 0;
}
}
else
{
cout<<"Warning"<<endl;
//system("pause");
return 0;
}
cout<<s<<endl;
//system("pause");
}