问题标题: 酷町堂1468 指定单词词频统计

0
0
已解决
张睿杰
张睿杰
初级天翼
初级天翼
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
    char a[501],b[101];
    int len,len2,ans=0,m=0,y=0,k=-1;
    gets(a);
    gets(b);
    len=strlen(a);
    len2=strlen(b);
    for(int i=0;i<=len-1;i++)
    {
        if(a[i]>='A'&&a[i]<='Z') a[i]+=32;
    }
    for(int i=0;i<=len2-1;i++)
    {
        if(b[i]>='A'&&b[i]<='Z') b[i]+=32;
    }
    for(int i=0;i<=len-1;i++)
    {
        if(a[i]==' ') y++;
        if(a[i]!=b[m])
            m=0;
        else if(a[i]==b[m])
        {
            m++;
        }
        if(m==len2)
        {
            if(k==-1) k=y+1;
            m=0;
            ans++;
        }
    }
    if(ans==0) cout<<"-1"<<endl;
    else cout<<k<<' '<<ans<<endl;
}

只有四十


0
已采纳
朱宗晔
朱宗晔
初级光能
初级光能

 我的代码,只有80分。仅供参考

string str[101010];
string str1;
char s;
int i,ans,first;
int main(){
    while(s != '\n'){
        i ++;
        cin >> str[i];
        for(int j = 0;j <= str[i].size() - 1;j ++){
            if(str[i][j] >= 'A' && str[i][j] <= 'Z'){
                str[i][j] += 32;
            }
        }
        s = getchar(); 
    }
    cin >> str1;
    for(int j = 0;j <= str1.size() - 1;j ++){
        if(str1[j] >= 'A' && str1[j] <= 'Z') str1[j] += 32;
    }
    for(int j = 1;j <= i;j ++){
        if(str1 == str[j]){
            if(first != 0){
                ans ++;
            }
            else{
                first = j;
                ans ++;
            }
        } 
    }
    if(first == 0) cout << -1 << endl;
    else cout << first << " " << ans << endl; 

 

0
陆姗姗
陆姗姗
资深守护
资深守护
for(int i=0;i<=len-1;i++)
    {
        if(a[i]==' ') y++;
        if(a[i]!=b[m])
            m=0;
        else if(a[i]==b[m])
        {
            m++;
        }
        if(m==len2)
        {
            if(k==-1) k=y+1;
            m=0;
            ans++;
        }
    }

 

你这个for循环的逻辑不对

 

最主要的点是你没有考虑如果b是a中的部分单词的话怎么办,题目中的意思是这种情况下不是一个单词,所以不算,你的代码里这种情况是算找到了的。举个例子,如果字符串a中的某个单词是 abbde ,字符串b是abbd,这种情况不算找到了。

0
0
王祥润
王祥润
新手守护
新手守护

先全变成小写,然后用cin一个一个读入比较

0
0
陶梓锐
陶梓锐
新手光能
新手光能
string lwr(string s)
{
    int l=s.size();
    for(int i=0;i<l;i++)
    {
        if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
    }
    return s;
}
陶梓锐在2018-01-13 15:02:32追加了内容
 a=lwr(a);
    s=lwr(s);
    s+=' ';
    while(true)
    {   
        n=s.substr(0,s.find(" ",0));
        if(n==a) 
        {
            flag=true;
            i++;
        }
        if(!flag)x++;
        s=s.erase(0,s.find(" ",0)+1);
        if(s.empty()) 
        {
            if(i==0) 
            {
                cout<<-1;
                return 0;
            }
            break;
        }
    }

 

 

核心代码,仅供参考

我要回答