求助
原题链接https://www.luogu.com.cn/problem/P1308
my code
#include<bits/stdc++.h>
using namespace std;
map<string,int>a;
int main(){
string n,temp;
int i = 0,cnt = -1;
cin>>n;
transform(n.begin(),n.end(),n.begin(),::tolower);
while(cin>>temp){
cnt++;
transform(temp.begin(),temp.end(),temp.begin(),::tolower);
if(temp == n){
i++;
if(a == 0) cout<<cnt<<" ";
cout<<i;
}
}
if(a == 0) cout<<"-1";
else cout<<i;
}
不是,我这个i在通过测试样例1的时候是只++了两次,怎么就成4了;
输入输出样例
输入 #1
To
to be or not to be is a question
输出 #1
2 0
问题出在你的代码中,你在每次找到匹配的单词时都会输出计数器i的值,导致i的值被重复输出了。
解决这个问题的方法是,在每次找到匹配的单词时,只输出一次计数器i的值,而不是每次都输出。你可以使用一个变量flag来判断是否已经输出过i的值,如果没有输出过,则输出i的值,并将flag设置为true,以后再找到匹配的单词时就不再输出i的值了。
修改后的代码如下:
#include<bits/stdc++.h>
using namespace std;
map<string,int>a;
int main(){
string n,temp;
int i = 0, cnt = -1;
bool flag = false; // 添加一个标志变量flag
cin >> n;
transform(n.begin(), n.end(), n.begin(), ::tolower);
while(cin >> temp){
cnt++;
transform(temp.begin(), temp.end(), temp.begin(), ::tolower);
if(temp == n){
i++;
if(a == 0){
cout << cnt << " ";
}
if(!flag){ // 如果flag为false,输出i的值
cout << i;
flag = true; // 将flag设置为true
}
}
}
if(a == 0){
cout << "-1";
}
else{
cout << i;
}
}
这样修改后,代码应该就能正确输出结果了。 我这个i输出这么多次就是为了测试 bug 测试出来了
map忘设置成1了
谢啦 map没有初始化为1
结帖
页:
[1]