acwing766 用cin过滤多余的空格
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin>>s) cout<<s<<' ';
return 0;
}
acwing766 去掉多余的空格 双指针算法
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s;
getline(cin,s);
string r;
for(int i=0;i<r.size();i++)
if(s[i]!=' ') r+=s[i];
else
{
r+=' ';
int j=i;
while(j<s.size()&&s[j]==' ') j++;
i=j-1;
}
cout<<r<<endl;
return 0;
}
acwing746 输出字符串
#include<iostream>
using namespace std;
int main()
{
string a,b;
getline(cin,a);
for(int i=0;i<a.size();i++) b+=(char)(a[i]+a[(i+1)%a.size()]);
cout<<b<<endl;
return 0;
}
acwing770 单词替换
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string s,a,b;
getline(cin,s);
cin>>a>>b;
stringstream ssin(s);
string str;
while(ssin>>str)
if(str==a) cout<<b<<' ';
else cout<<str<<' ';
return 0;
}
stringstream用法
#include<iostream>
#include<cstdio>
#include <sstream>
using namespace std;
int main()
{
string s;
getline(cin,s);
stringstream ssin(s);
int a,b;
string str;
double c;
while(ssin>>c)
ssin>>a>>str>>b>>c;
cout<<a<<endl<<str<<endl<<b<<endl<<c<<endl;
return 0;
}
sscanf用法
#include<cstdio>
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
char s[1000];
fgets(s,1000,stdin);
int a,b;
char str[1000];
double c;
sscanf(s,"%d%s%d%lf",&a,str,&b,&c);
printf("%d\n%s\n%d\n%lf",a,str,b,c);
return 0;
}
acwing774 最长单词
#include<iostream>
using namespace std;
int main()
{
string res,str;
while(cin>>str)
{
if(str.back()=='.') str.pop_back();
if(str.size()>res.size()) res=str;
}
cout<<res<<endl;
return 0;
}
acwing775倒排单词 存入字符串数组 再倒序输出
#include<iostream>
using namespace std;
int main()
{
string str[100];
int n=0;
while(cin>>str[n]) n++;
for(int i=n-1;i>=0;i--) cout<<str[i]<<' ';
cout<<endl;
return 0;
}
acwing776 字符串移位包含问题
#include<iostream>
using namespace std;
int main()
{
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++)
{
int k=0;
for(;k<b.size();k++)
if(a[j+k]!=b[k])
break;
if(k==b.size())
{
puts("true");
return 0;
}
}
}
puts("false");
return 0;
}
777 字符串乘方
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
string str;
while(cin>>str,str!=".")
{
int len=str.size();
for(int n=len;n;n--)//n是幂次 从大到小遍历
if(len%n==0)
{
int m=len/n;//约数便是子串的长度
string s=str.substr(0,m);
string r;
for(int i=0;i<n;i++) r+=s;//找到子串 拼接n次
if(r==str)//判断拼接后是否相等
{
cout<<n<<endl;
break;
}
}
}
return 0;
}
acwing778 字符串最大跨距
#include <iostream>
using namespace std;
int main()
{
string s, a, b;
char c;
while (cin >> c, c != ',') s += c;
while (cin >> c, c != ',') a += c;
while (cin >> c) b += c;
if (s.size() < a.size() || s.size() < b.size()) puts("-1");
else
{
int l = 0;
while (l + a.size() <= s.size())
{
int k = 0;
while (k < a.size())
{
if (s[l + k] != a[k]) break;
k ++;
}
if (k == a.size()) break;
l ++;
}
int r = s.size() - b.size();
while (r >= 0)
{
int k = 0;
while (k < b.size())
{
if (s[r + k] != b[k]) break;
k++;
}
if (k == b.size()) break;
r --;
}
l += a.size() - 1;
if (l >= r) puts("-1");
else cout << r - l - 1;
}
return 0;
}
acwing779 最长公共字符串后缀
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
while(cin >> n, n)
{
string s, a;
int MAX = 999999;
cin >> s;
for(int i = 1; i < n; ++ i)
{
int res = 0;
cin >> a;
for(int j = 0; j < a.size() && j < s.size(); ++ j)
if(a[a.size() - 1 - j] == s[s.size() - 1 - j]) res++;
else break;
MAX = min(MAX, res);
}
if(MAX) cout << s.substr(s.size()-MAX) << endl;
else cout << endl;
}
return 0;
}