题集来自Acwing:https://www.acwing.com/problem/
例如搜750题,直接添加750即可:https://www.acwing.com/problem/750
题目766-去掉多余空格
//方法1,利用cin读入时省略多余空格(略)。
//方法2,使用getline整行读取并双指针判断删除空格。
string s;
getline(cin,s);
string r;
for(int i=0;i<s.size();i++)
{
if(s[i] != ' ') r = r+s[i];
else
{
r = r + " ";
int j = i; //用于定位当前连续空格的首位
while(j<s.size() and s[j]== " ") j++ //满足连续空格条件就自增
i = j - 1 ; //已经过滤掉所有空格,-1是因为i++
}
}
cout << r << endl;
题目764 输出字符串
string a,b;
getline(cin,a);
for(int i=0;i<a.size();i++)
{
//这里取模的原因是i+1超出界限时回到0
b = b + char(a[i]+a[(i+1)%a.size()]);
cout << b << endl;
}
题目770.单词替换
string s,a,b;
getline(cin,s);
cin>>a>>b;
//ssin就是提取字符串中需要的信息,比如说
//stringstream ssin(s);
//int a,b;string str;
//ssin >> a >> str >> b ;
//cout << a << str << b ;
stringstream ssin(s);
string str;
while(ssin >> str){
if(str == a) cout << b << " ";
else cout << str << " ";
return 0;
}
题目771.字符串中最长的连续出现的字符-双指针算法
for(int i=0;i<s.size();i++)
{
int j=i;
while(j<s.size() and s[j]=s[i]) j++;
r = j-1;
}
int n;
cin >> n;
while(n--)
{
string str;
cin >> str ;
int cnt = 0; //最大出现次数
char c; //最大出现的字符
for(int i = 0;i <str.size();i++)
{
int j = i;
//此时i与j之间就是所有相同字符段
while(j<str.size() and str[j] == str[i]) j++;
if(j-i > cnt) {
cnt = j-i;
c = str[i];
i = j -1 ;
}
cout << c << " " << cnt << endl;
}
}
题目774 最长单词
string res,str;
//cin读取时,自动以空格作为划分
while(cin >> str)
{
//string中back()用于返回字符串的最后一个字符
//string中pop_back()用于去掉字符串的最后一个字符
if(str.back() == '.') str.pop_back();
if(str.size() > res.size()) res = str;
}
cout << res << endl;
题目775 倒排单词
string str[100];
int n=0;
while(cin >> str[n]) n++;
for(int i=n-1;i>=0;i--)
{
cout << str[i] << " ";
}
题目776 字符串移位包含问题
string a,b;
cin >> a >> b;
if(a.size()<b.size()) swap(a,b);
for(int i=0;i<a.size();i++)
{
//循环移位
a = a.substr(1) + a[0];
//至少留出原单词相等的距离,这样后面不够长度的就可以省略对比了
for(int j=0;j+b.size()<=a.size();j++)
{
for(int k =0;k<b.size();k++)
{
if(a[j+k]!= b[k]) break ;
if(k == b.size())
{
puts("true");
return 0;
}
}
}
}
puts("false");
return 0;
题目778 字符串最大跨距
string s,s1,s2;
char c;
while(cin >> c,c!=",") s= s+c;
while(cin >> c,c!=",") s1= s1+c;
while(cin >> c) s2= s2+c;
int l = 0;
while(l + s1.size() <= s.size())
{
int k=0;
while(k < s1.size())
{
if(s[l+k] != s1[k]) break;
k++;
}
if(k == s1.size()) break;
l++;
}
int r = s.size()-s2.size();
while(r>=0)
{
int k=0;
while(k < s2.size())
{
if(s[r+k] != s2[k]) break;
k++;
}
if(k == s2.size()) break;
r--;
}
l = l+s1.size()-1;
if(l >= r) puts("-1");
else printf("%d\n",r-l-1);