文章
1
粉丝
0
获赞
2
访问
208
为什么我的代码通过率只有50%,自己在本地跑了没有问题呀?有没有大佬能看看哪里有问题呀?
#include<bits/stdc++.h>
using namespace std;
map<string,int> mp;
bool cmp(pair<string,int> a,pair<string,int> b){
if(a.second==b.second){
return a.first<b.first;
}
return a.second>b.second;
}
int main(){
string s;
getline(cin,s);
int len=s.length();
int cnt=0;
for(int i=0;i<len;i++){
if(s[i]==' '||s[i]==','||s[i]=='.'){
string sub=s.substr(i-cnt,cnt);
mp[sub]++;
cnt=0;
}else{
...
登录后发布评论
这段代码存在几个问题,导致无法正确处理所有输入情况,具体分析如下:
问题 1:未处理多行输入
题目明确说明 “输入有若干行”,但代码中仅使用
getline(cin, s)
读取了一行输入,会忽略后续行的内容,导致统计不完整。问题 2:连续分隔符导致空字符串被统计
当出现连续的分隔符(如多个空格、逗号或句号相连)时,代码会截取空字符串并计入统计。例如输入
"a,,b"
,第二个逗号会触发截取cnt=0
的子串(空串),导致mp
中出现空字符串的计数,这不符合 “单词” 的定义。问题 3:字符串结尾的单词未被统计
如果输入的最后一个字符不是分隔符(如
"hello world"
结尾是d
而不是分隔符),循环结束后,最后一个单词的字符会积累在cnt
中,但不会被处理,导致该单词未被统计。修正后的代码
修正说明
while (getline(cin, line))
循环读取所有行,拼接成一个字符串统一处理。cnt > 0
(即存在有效字符)时,才截取并统计单词,避免空字符串被计入。cnt > 0
,若成立则截取最后一个单词并统计,确保所有单词都被计数。这样修改后,代码能正确处理题目要求的各种输入情况。