计算文件中字符串出现的次数

ByXc_lzc 2017-08-13 11:29:48
提个问题,假设一个文件里有很多名字,名字有可能出现多次,但名字是不确定的。要求计算出每个名字出现的次数。有什么好的算法呢?
...全文
323 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhagoodwell 2017-09-03
  • 打赏
  • 举报
回复
//返回b在a中的个数  
int BF(char a[],char b[]){                       
    int i=0,j=0,k=0;   
    do{  
        if (b[j]&&a[i++]==b[j])   
            ++j;  
        else  
        {  
            b[j]?(i-=j):k++;   
            j=0;              
        }  
    }while(a[i-1]);  
        return k;  
}
比如你要查 "AAA"那么把文件用a[]存起来 然后 直接 n=BF(a,"AAA"); 即可
zhagoodwell 2017-09-03
  • 打赏
  • 举报
回复
//返回b在a中的个数  
int BF(char a[],char b[]){                       
    int i=0,j=0,k=0;   
    do{  
        if (b[j]&&a[i++]==b[j])   
            ++j;  
        else  
        {  
            b[j]?(i-=j):k++;   
            j=0;              
        }  
    }while(a[i-1]);  
        return k;  
}
xiaohuh421 2017-08-14
  • 打赏
  • 举报
回复
kmp算法就是处理这个东西的.
自信男孩 2017-08-14
  • 打赏
  • 举报
回复
引用 4 楼 ByXc_lzc 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:] 根据你文件里名字存在的格式来定。你给的需求不够详细,不好确定是用那种办法。 一般是遍历文件数据(先读到内存,可以边读边解析名字),然后找到对应的名字解析,统计。 以下是数据结构,可以考虑一下:

struct word {
    char name[32];
    int num;     /* count the time of the name appearing.*/
};
由于不清楚name的个数,建议使用链表
我是用结构, 但链表我还没学到。其实这是 c primer plus十四章编程练习的第6题。只是这一段我不知到怎么去实现[/quote] 如果没学到链表,那么建议用数组吧,但是数组长度需要实现确定。建议定义一个足够大的数组(比预计多一些空间),或者使用动态申请空间,malloc和realloc配合使用
ByXc_lzc 2017-08-14
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
根据你文件里名字存在的格式来定。你给的需求不够详细,不好确定是用那种办法。 一般是遍历文件数据(先读到内存,可以边读边解析名字),然后找到对应的名字解析,统计。 以下是数据结构,可以考虑一下:

struct word {
    char name[32];
    int num;     /* count the time of the name appearing.*/
};
由于不清楚name的个数,建议使用链表
我是用结构, 但链表我还没学到。其实这是 c primer plus十四章编程练习的第6题。只是这一段我不知到怎么去实现
ByXc_lzc 2017-08-14
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
使用strtok把文件拆开,检查拆开的数量 注意头尾的处理 另外要求似乎不是很明确,比如名字是aa 那么文件中有 aaaaaa 这样算几次?
文件的字符串是有格式的比如 Jessie Joybat 一个名字一行
自信男孩 2017-08-14
  • 打赏
  • 举报
回复
根据你文件里名字存在的格式来定。你给的需求不够详细,不好确定是用那种办法。 一般是遍历文件数据(先读到内存,可以边读边解析名字),然后找到对应的名字解析,统计。 以下是数据结构,可以考虑一下:

struct word {
    char name[32];
    int num;     /* count the time of the name appearing.*/
};
由于不清楚name的个数,建议使用链表
ckc 2017-08-14
  • 打赏
  • 举报
回复
使用strtok把文件拆开,检查拆开的数量 注意头尾的处理 另外要求似乎不是很明确,比如名字是aa 那么文件中有 aaaaaa 这样算几次?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧