C语言程序,在文件中查找指定字符串出现的次数,对文件操作实在没写过,看看怎么写

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineFILENAME_MAX20intStrCount... #include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define FILENAME_MAX 20

int StrCount(FILE *file,char *str);

void main()
{
char *filename,*spestr;
int num;
FILE *fp;
filename=(char *)malloc(FILENAME_MAX);
spestr=(char *)malloc(FILENAME_MAX);
printf("Input the filename:");
while(1)
{
scanf("%s",filename);
fp=fopen(filename,"r");
if(fp!=NULL)break;
printf("Can't open the file.");
}
printf("Input the special string:");
scanf("%s",spestr);
num=StrCount(fp,spestr);
fclose(fp);
printf("%d times of %s in %s.",num,spestr,filename);
}

int StrCount(FILE *file,char *str)
{
int i,length,count=0;
char ch,q,*temp;
char s[20];
q=*str;
length=strlen(str);
while(1)
{
while((ch=fgetc(file))!=EOF)
{
if(ch==q)
continue;
}
for(i=0;i<length;i++)
{
ch=fgetc(file);
s[i]=ch;
}
if(strcmp(str,s)==0)
count+=1;
if(ch==EOF)break;
}
return count;
}
运行出来貌似不行啊,strcount这个函数怎么改,对文件中的定位真是晕
展开
 我来答
百度网友b0e28cae4
2011-08-24 · TA获得超过4016个赞
知道大有可为答主
回答量:1275
采纳率:85%
帮助的人:621万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define FILE_NAME_MAX 50
#define SEPERATE_STRING_MAX 100

int StrCount(FILE *file,char *str);

int main()
{
char *filename,*spestr;
FILE *fp;
filename=(char *)malloc(FILE_NAME_MAX);
spestr=(char *)malloc(SEPERATE_STRING_MAX);
printf("Input the filename:");
while(1)
{
scanf("%s",filename);
fp=fopen(filename,"r");
if(fp!=NULL)
{
break;
}
printf("Can't open the file.Try Again!");
}
printf("Input the special string:");
scanf("%s",spestr);

printf("%d times of %s in %s.",StrCount(fp,spestr),spestr,filename);

fclose(fp);
free(filename);
free(filename);

return 0;
}

int StrCount(FILE *file,char *str)
{
int count=0;
char ch;
int p=0;;

while((ch=fgetc(file))!=EOF)
{
// 当前读入的字符匹配 str 相应位置的字符
if(ch == str[p])
{
// 匹配下一个字符
p++;
// 如果已经匹配成功
if(str[p] == '\0')
{
count++;
// 从头开始重新匹配
p = 0;
}
}
// // 当前读入的字符不匹配 str 相应位置的字符
else
{
// 匹配失败,文件指针回溯
fseek(file,(p>0?-(p-1):0),SEEK_CUR);
// 从头开始重新匹配
p = 0 ;
}
}
return count;
}
682fmte031
2011-08-25 · TA获得超过236个赞
知道答主
回答量:509
采纳率:0%
帮助的人:325万
展开全部
#include<iostream>
#include<conio.h>
#include<string>
#include<stdlib.h>
using namespace std;

int Count=0;

/*
*函数名:findNum
*作者:anglecloudy
*描述:如果存在则返回字符串所在的位置,否则返回0,暂不支持文本中存在多个相同的串
* 先用test.txt文本测试,所有的文本操作都是一样的,不管你怎么命名
*/
int findNum(char *str)
{
FILE *p;
if((p=fopen("test.txt","rb"))==NULL)
{
printf("\n打开文件失败\n");
return 0;
}
char buffer[0x1000]; //保存文件
memset(buffer,0,0x1000); //初始化缓存
size_t fileLen=fread(buffer,sizeof(char),0x1000,p); //得到文件内容,
int readLen=strlen(str);
int IsFind=0;

for(int i=0;i<fileLen;i++)
{
if(strncmp(buffer+i,str,readLen)==0)
{
IsFind=i;
}
}

fclose(p);
return IsFind;
}

int main(void)
{
char *str1="1234567";
int t1=0,t2=0;
if((t1=findNum(str1))==0)
{
printf("没有找到字符串%s\n请按任意键退出\n",str1);
return -1;
}
else
{
printf("字符串%s的位置在%d\n",str1,t1);
}
return 0;
}

我只是简单的改了一下你的字符串查找这个函数,其它的没写。主要是你的思想不对,对文件的操作一般先定义一个数组,把文件保存起来,然后再操作,多去上面问问,高手多,下班了。88
追问
多去“上面”问问?!?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bd4cf2a31
2011-08-24 · TA获得超过332个赞
知道小有建树答主
回答量:333
采纳率:100%
帮助的人:349万
展开全部
int StrCount(FILE *file,char *str)
{
int i,j,k,length,length_file=0,count=0;
char ch,q,*temp;
char s[20];
q=*str;
length=strlen(str);

while((ch=fgetc(file))!=EOF)
{
s[length_file]=ch;
length_file++;
}
s[length_file]='\0';
printf("%s,%s\n",s,str);
for(i=0;s[i];i++)
for(j=i,k=0;s[j]==str[k];k++,j++)
{
if(str[k+1]=='\0')
{
count++;
break;
}
}
return count;
}
主程序不变,修改StrCount(FILE *file,char *str)函数,以上是我改好的,我试了下OK!,
我的思路是把文件里的内容读出到数组中,然后直接找出这个数组中你需要字符串的个数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
furious_tauren
2011-08-24 · TA获得超过4056个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:775万
展开全部
int Strcount(FILE *fp, char *str)
{
char buf[128] = {0};
int len = strlen(str);
int count = 0;
char ch;

while ((ch = fgetc(fp)) != EOF)
{
if (str[0] != ch)
continue;

fgets(buf, len, fp);

if (strncmp(buf, str + 1, len) == 0)
count++;
else
fseek(fp, -len, SEEK_CUR);
}
return count;
}

运行结果:
[root@beauty ~]# cat a.txt
hello world hello people
hello good

say hello hellohello
[root@beauty ~]# ./a.out
6

hello world hello people
hello good

say hello hellohello 是文件内容, 6是统计结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式