AcWing 770. 单词替换
原题链接
中等
作者:
og_
,
2020-04-24 21:44:49
,
所有人可见
,
阅读 10842
方法一
C++ 代码
#include<bits/stdc++.h>
using namespace std;
string a[10000],b,d;
int main()
{
int n=0,c=0;
while(cin>>a[c])
{
c++;
char x=getchar();
if(x=='\n')
break;
}
cin>>b>>d;
for(int i=0;i<c;i++)
{
if(a[i]==b)
cout<<d<<" ";
else
cout<<a[i]<<" ";
}
}
方法二
C++ 代码
#include<bits/stdc++.h>
using namespace std;
string a[10000],b,d;
int main(){
int i=0;
while(cin>>a[i]) i++;
for(int k=0;k<i-2;k++){
if(a[k]==a[i-2]) cout<<a[i-1];
else cout<<a[k];
cout<<" ";
}
}
开始一直把a[10000]看成了字符数组,后来才发现是字符串数组。刚开始一直没看懂,我人麻了。
同
我也是,多谢提醒
同
同,感谢提醒
同
第一种方法,cin为啥只有读到空格,才进循环里面
cin只能读到空格前的那些数据 你可以理解成cin的语法特性, 比如 string a=” ” cin>>a 输入的是”a b” 输出的答案是a,而不是a b
懂了懂了,谢谢
cin 不能读取空格(空白字符)
第二个方法是真的秒啊,没有用stringstream赞
膜拜!!方法二!!字符串数组
Messi !!
梅西大佬?
忠诚的球迷
大佬,第二种的思路我懂了,但是我有一个问题,程序怎么知道while循环可以跳出呢?我在自己的电脑上运行什么都没有显示
输入结束时条件为假,自动跳出循环
输入到没输入为止
crtl+Z可以抢=强制结束输入
我也是
好像有些编译器可以支持ctrl+Z退出,vs应该不行
vs可以的
oj可以自动运行退出,自己调试可以手动三个ctrl z退出
tql
没有用ssin 赞
orz orz orz orz orz orz orz orz
第一种代码,输入
cin >> a[c]
,这个地方输入的字符超过1的话,为什么每次c只加1,后面遍历的时候,此时c应该是字符串的长度,这怎么保证?不太理解哦我懂了 作者的意思是c记录单词数量对吗,遍历的时候c是单词的总数
tql
真的惊艳到我了,orz.
tql
我有个问题,方法一里面那个遇到/nbreak,但是单词之间本来就有间隔啊,不会第一个间隔就停吗
还有,我没有搞懂getchar在这里的意义是什么,是说在接受一次单词之后再判断里边的每一个字符吗
char x=getchar,下一句里判断了x是否等于空格,如果等于就break
getchar()读取键盘输入
#include [HTML_REMOVED]
#include [HTML_REMOVED]
using namespace std;
int main(){
string s,a,b;
int c;
getline(cin,s);
cin >> a >> b;
for(int i = 0;i < s.size();i){
if(a[0] == s[i]){
c = 1;
for(int j = 1;j < a.size();j){
if(a[j] == s[i + j]){
c++;
}
}
if(c == a.size()){
if(i == 0 && s[i + int(a.size())] == ‘ ‘){
cout << b;
i = i + a.size() - 1;
}
else if(i + int(a.size()) == s.size() && s[i - 1] == ‘ ‘){
cout << b;
i = i + a.size() - 1;
}else if(i == 0 && (i + int(a.size()) == s.size())){
cout << b;
i = i + a.size() - 1;
}else if(s[i - 1] == ‘ ‘ && s[i + int(a.size())] == ‘ ‘){
cout << b;
i = i + a.size() - 1;
}else{
cout << s[i];
}
}else{
cout << s[i];
}
}else{
cout << s[i];
}
}
}
超困难版
666666666666666666666666666666666666666666666
一开始傻傻的吧c和d读进去了,所以只能这样
大佬可以解释一下, 上面的方法二吗?谢谢
一样的,后面的两个string被读到n-1和n-2里面去了,有效位是1到n-3位
大佬听不太懂
厉害,大佬!