香蕉那个不拿拿 发表于 2023-8-30 21:14:07

求助

原题链接
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

isdkz 发表于 2023-8-30 21:14:35

问题出在你的代码中,你在每次找到匹配的单词时都会输出计数器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;
    }
}


这样修改后,代码应该就能正确输出结果了。

香蕉那个不拿拿 发表于 2023-8-30 21:16:20

我这个i输出这么多次就是为了测试 bug

香蕉那个不拿拿 发表于 2023-8-30 21:19:08

测试出来了
map忘设置成1了
谢啦

sfqxx 发表于 2023-8-30 21:34:50

map没有初始化为1

结帖
页: [1]
查看完整版本: 求助