社区
C语言
帖子详情
请教一下,如何用C语言实现文件中关键字的查找和统计
kitty1044
2004-05-14 12:23:49
怎样用C语言实现在一个文本文件里查找几个关键字并统计每个的个数,文本里既有中文也有英文数字和其它字符,因为不知道如何兼顾总是找的个数不对,希望高手予以指点,如果有源代码可以学习就太好了.现在要急用,先行谢过!
...全文
860
7
打赏
收藏
请教一下,如何用C语言实现文件中关键字的查找和统计
怎样用C语言实现在一个文本文件里查找几个关键字并统计每个的个数,文本里既有中文也有英文数字和其它字符,因为不知道如何兼顾总是找的个数不对,希望高手予以指点,如果有源代码可以学习就太好了.现在要急用,先行谢过!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
summerxiaqing
2004-05-14
打赏
举报
回复
不好意思,上面的函数写错了应该是strstr(const char *s1, const char *s2);
改为如下代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *file1;
char ch[MAX]; //MAX值自己定义,我用过好像10000都可以,在turbo c++3.0下
char source[] = "source"; //这是被查询指针,随便赋值的
char *search = ch;
int count = 0;
file1 = fopen("filename", "r");
fscanf("%s", ch);
search = strpstr(search, source);
while (search != NULL)
{
search = strstr(search, source);
search++;
count++;
}
fclose(file1);
//count就是个数,你要的函数可以自己改一下
return 0;
}
summerxiaqing
2004-05-14
打赏
举报
回复
不知道你要读的文件长不长,如果不长的话可以一次把文件内容读到一个字符缓冲区里,再调用strpbrk(const char *s1, const char *s2)(这个函数,这是定位s1中首次出现s2种字符串的函数,并将指针定位到该字符处。)然后将查询指针后移一位,在进行查找,直到strpbrk()返回NULL指针为止。以下是我写的一个简单代码。
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *file1;
char ch[MAX]; //MAX值自己定义,我用过好像10000都可以,在turbo c++3.0下
char source[] = "source"; //这是被查询指针,随便赋值的
char *search = ch;
int count = 0;
file1 = fopen("filename", "r");
fscanf("%s", ch);
search = strpbrk(search, source);
while (search != NULL)
{
search = strpbrk(search, source);
search++;
count++;
}
fclose(file1);
//count就是个数,你要的函数可以自己改一下
return 0;
}
//代码我没有编译过,所以不一定直接能用,^-^
cngdzhang
2004-05-14
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
FILE *f;
#define KEYNUM 17
char keyword[KEYNUM][10]={"void","char","int","long","double",
"for","do","while","if","else",
"switch","case","default","return","goto",
"break","continue"};
int keycount[KEYNUM];
void main()
{
char c;
char str[100];
char *p;
int i;
int total=0;
for(i=0;i<KEYNUM;i++)
{
keycount[i]=0;
}
clrscr();
f=fopen("asm.txt","rb");
while(!feof(f))
{
c=fgetc(f);
while(c==' ' || c=='\t' || c=='\r' || c=='\n') c=fgetc(f);
if(c==';')
{
while(c!='\n') c=fgetc(f);
}
if(isalpha(c))
{
p=str;
while(isalpha(c))
{
*p++=c;
c=fgetc(f);
}
*p='\0';
for(i=0;i<KEYNUM;i++)
{
if(strcmp(keyword[i],str)==0)
{
keycount[i]++;
total++;
break;
}
}
}
}
printf("Total KeyWords : %d\n\n",total);
for(i=0;i<KEYNUM;i++)
{
printf("%-10s %3d\n",keyword[i],keycount[i]);
}
fclose(f);
}
sharkhuang
2004-05-14
打赏
举报
回复
strstr
strtok
heibai520
2004-05-14
打赏
举报
回复
可以这样实现!
我试了!
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<conio.h>
struct KeyWord{
char Keyword[20];
int count;
};
KeyWord KeywordTable[]=
{
{"else",0},{"for",0},{"if",0},{"include",0},{"while",0}
};
int SeqSearch(KeyWord *tab,int n,char *word)
{
int i;
for(i=0;i<n;i++,tab++)
if(strcmp(word,tab->Keyword)==0)
return i;
return -1;
}
int Getword(ifstream &fin,char w[])
{
char c;
int i=0;
while(fin.get(c)&&!isalpha(c));
if(fin.eof())
return 0;
w[i++]=c;
while(fin.get(c)&&(isalpha(c)||isdigit(c)))
w[i++]=c;
w[i]='\0';
return 1;
}
void main(void)
{
const int MAXWORD=50;
const int NKEYWORDS=sizeof(KeywordTable)/sizeof(KeyWord);
int n;
char word[MAXWORD],c;
ifstream fin;
fin.open("prg2_5.cpp",ios::in | ios::nocreate);/prg2_5.cpp就是统计本文件
if(!fin)
{
cerr<<"Could not open file'prg2_5.cpp'"<<endl;
exit(1);
}
while(Getword(fin,word))
if((n=SeqSearch(KeywordTable,NKEYWORDS,word))!=-1)
KeywordTable[n].count++;
for(n=0;n<NKEYWORDS;n++)
if(KeywordTable[n].count>0)
{
cout<<KeywordTable[n].count;
cout<<" "<<KeywordTable[n].Keyword<<endl;
}
fin.close();
getch();
}
BluntBlade
2004-05-14
打赏
举报
回复
可以考虑使用Boost库里的Regex类(正则表达式),功能强大,方便易用。
kitty1044
2004-05-14
打赏
举报
回复
多谢各位好心人,我要做的工作是在网页里的文本文件里搜索我输入的字符串(也就是关键字),网页里的文本应该大一些,一次读到字符缓冲区里也可以吗?如果我要查询多个词是不是可以把这些词放到一个字符串数组里依次查找?
分包图纸查看故障,分包字体合集正常浏览.rar
还在被 CAD 文字乱码、显示问号、字体缺失困扰?这份完整解决方案,绝大多数问题都能搞定,速收,欢迎下载!
【更新至2025年】2001-2025年上市公司数字化转型年报词频
统计
(吴非、赵宸宇、甄红线)(300+年报词频
统计
)
【更新至2025年】2001-2025年上市公司数字化转型年报词频
统计
(吴非、赵宸宇、甄红线)(300+年报词频
统计
) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行
统计
(2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行
统计
(3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行
统计
5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅
中
英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然
语言
处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频
Hash计算工具 V2.0(支持MD5 SHA0 SHA1 SHA2-256 SHA2-512 SHA3-256 SHA3-512 SM3 SKAP512 GAOD512等哈希算法)
本软件支持一键计算字符串和
文件
两种输入格式的Hash值 到目前为止支持常见的 { MD5: SHA0: SHA1: SHA2-256: SHA2-512: SHA3-256: SHA3-512: SM3: SKAP512(自研): GAOD512(自研): } 等等Hash算法(密码杂凑算法)
实用代码脚本易
语言
源码目录监视
实用代码脚本易
语言
源码目录监视
政府科技管理者如何利用科创数智大脑
实现
产业政策精准匹配?.docx
政府科技管理者如何利用科创数智大脑
实现
产业政策精准匹配?
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章