单词统计

链接:https://ac.nowcoder.com/acm/problem/20443
来源:牛客网

题目描述

某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。

输入描述:

第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N ≤ 200,单词长度不超过10^6

输出描述:

输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。
示例1

输入

 

输出

 
我对字符串还是不怎么熟悉,一开始用char折腾半天,后面看到大佬都用的string处理,发现确实好多了。基本上是一个字符匹配算法。
#include<bits/stdc++.h>
using namespace std;    
string s[205];
int axs(int x,int y)
{
    string a=s[x],b=s[y];
    int i,j,count,s=0;
    int len1=a.length(),len2=b.length();//a,b串长     
    if(len1>len2)//如果a比b长直接不需要比较了,将没有配对的 
    return 0;
    for(i=0;i<=len2-len1;i++)//len2-len1表示有几次配对机会-1 
    {
        if(a[0]==b[i])//在b中找到与a的首字母匹配的对象再继续进行比较下去 
        {
            count=0;//统计匹配成功次数 
            for(j=0;j<len1;j++)
            {
                if(a[j]==b[i+j])//暴力匹配 
                    {
                        count++;
                    }
            }
                if(count==len1)//将a检测完后表示匹配一次 
            {
                s++;
            }
        }
    }
    return s;
}
int main()
{
    int sum;
    int n;
    cin>>n;
    int i,j;
    for(i=0;i<n;i++)//输入N行数据 
    {
        cin>>s[i];
     }
    for(i=0;i<n;i++)//用第i个分别与第J个进行比较 
    {
        sum=0;
        for(j=0;j<n;j++)
        {
            sum+=axs(i,j);
        }
         cout<<sum<<endl;//当第i个与最后一个j比较完后输出结果 
    }
     
}
原文地址:https://www.cnblogs.com/Truedragon/p/12316705.html