0
已解决
张睿杰
初级天翼
初级天翼
1468 指定单词词频统计
题目描述 Description
微软办公软件word想推出新的功能,即对于指定的单词,可以统计在整个字符串中出现的次数,并输出该单词在字符数组中第一次出现是第几个单词(不区分大小写,也就是说“HeLLo”和“hello”算同一个单词),如果该单词没有出现在该字符串中,则输出-1。单词之间用单个空格隔开。
输入描述 Input Description
输入为2行:
第一行为一个字符串,长度不超过500。
第二行为需要统计的单词,长度不超过100。
输出描述 Output Description
输出为一行,如果该单词没有出现在字符串中,则输出-1,如果该单词出现在字符串中,输入该单词第一次出现是第几个单词以及该单词在整个字符串中出现的次数,中间用单个空格隔开。
样例输入 Sample Input
ab AbC def aBc abc def abC
ABc
样例输出 Sample Output
2 4
#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
已采纳
方亦欧
新手光能
新手光能
不好意思,你的程序我没有看出错误。
给你发一下我的思路。
1:将输入的字符串中的单词提取出来。
for(i=1;i<l1;i++)
if(s1[i]!=' ')
s2+=s1[i];
else
{
s3[l2]=s2;
l2++;
s2="\0";
}
s3[l2]=s2;
//s3是提取出来的字符串数组,s2只是载体。
2:将单词(输入的第二行)全部转为小写,你在这个时候将第一个字符串也一起转化也可以,只不过要用双重循环。
这一步不写代码了。
3:for循环遍历第一个字符串中的每一个单词,将它与需要统计的单词(输入的第二行)相比较并进行处理,应该不难。
for(i=0;i<l2;i++)
{
count1++;
s2=s3[i];
l3=s2.size();
for(j=0;j<l3;j++)
if(s2[j]>='A' && s2[j]<='Z')
s2[j]+=32;
if(s2==s4)
{
count2++;
if(count2==1)
first=count1;
}
}
输出,结束。
我这个思路很复杂,代码实现很困难,希望你能看懂。
望采纳!
0
黄俊博
资深光能
资深光能
前面的大小写转化可以自己完成吧
这是核心:
while(pos<k.size()) { s[n]=k.substr(pos+1,k.find(" ",pos+1)-pos-1); pos=k.find(" ",pos+1); n++; } for(int i=0;i<n;i++) { if(s[i]==a && f==0) { pos=i+1; count++; f=1; } else if(s[i]==a && f==1) { count++; } } if(pos!=-1)cout<<pos<<" "<<count; else cout<<-1;
0