#include<cstring>
#include<iostream>
using namespace std;
string l,lm;
int len,maxx,f;
int main(){
while(cin>>l){
len=l.size();
if(l[len-1]=='.'){
len--;
l.erase(len,1);
f=1;
}
if(len>maxx){
lm=l;
maxx=len;
}
if(f) break;
}
cout<<lm;
return 0;
}
我(也是刚学会qaq)给后面看到的童鞋解释一下关于while(cin>>l)输入的问题 这里不需要加f,Unix系统中回车,ctrl+D就可以阻塞输入了 回车,ctrl+Z,windows环境下就可以阻塞输入了
为什么你可以发表情包
y总超短写法
cin 不是会阻断空格吗?为什么可以
不加f有什么后果吗?不加也通过了
不加f貌似没啥事,f主要是为了控制跳出循环的条件
#include [HTML_REMOVED]
using namespace std;
int main()
{
string str,temp;
int n=0;
while (cin >> str){
int s=str.length();
if(str[s-1]==’.’){
str.erase(s-1,s-1);
s=s-1;
}
if(s>n){
temp=str;
n=s;
}
}
cout << temp<< endl;
return 0;
}
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
main(){
string s,n;
int max=0;
while(cin>>s){
int i=s.size();
if(s[i-1]==’.’){
s[i-1]-=46;// 将’.’变为空字符
i–;
}
if(i>max){
max=i;
n=s;
}
}
cout<<n;
}
作者:Szzy
链接:https://www.acwing.com/solution/content/188476/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
补充一下,如果 l.erase(len,1) 应该改为 l.erase(len-1,1),因为是从第 len 个字符向后删除,而不是向前删除,所以得向前移一位删。
可以用例子,输入 “abc.” 来检验
作者这里先len–了的
l.erase(len,1);是什么意思?
删除字符,从第个len位置,删除1个字符
string s1, s2;、
s1.find(s2);
// 在 s1 中查找字符串 s2,找到返回 s2 首字母在字符串中的下标,找不到返回 -1
s1.replace(pos, len, s2);
// 把 s1 中从下标 pos 开始的长度为 len 的子串替换为 s2
s1.erase(it);
// 把 s1 字符串中迭代器 it 处的字符删除
s1.erase(pos, len);
// 把 s1 中从下标 pos 开始的长度为 len 的子串删除