当前位置: 代码迷 >> C语言 >> [求助]关于文本编辑中的查找
  详细解决方案

[求助]关于文本编辑中的查找

热度:153   发布时间:2005-12-30 16:33:00.0
[求助]关于文本编辑中的查找

哪位达人给小弟看下为什么系统报错?

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

void main()
{
int i=0,j=0,k=0,l=0;
char q[3]={'a','b','c'};
char *p,*m,**n,**z;
char ch = 0;
FILE *fp;
char filename[10];
p=q;

scanf("%s",filename);

if((fp=fopen(filename,"r"))==NULL){
printf("error open the file");
exit(0);
}

while(ch != -1)
ch=fgetc(fp);

j=ftell(fp);

m = (char *)malloc (j);

fseek(fp,1L,1);
i=j;

for(i=j;i>=0;i--)
{
ch=fgetc(fp);
fseek(fp,-2L,1);
*(m+i)=ch;
}

for(i=0;i<j-2;i++)
if(*(m+i)==*p)k=k+1;

n=(char **)malloc(k);

for(i=0;i<j-2;i++)
if(*(m+i)==*p){
*(n+l)=(m+i);
l++;
}

for(i=1;i<3;i++)
{
k=0;

for(j=0;j<l-(2-i);j++)
if(**(n+i)=*(p+i))
k=k+1;

z=(char **)malloc(k);

for(j=0;j<l-(2-i);j++)
if(**(n+i)=*(p+i)){
*(z+j)=*(n+i);
j++;
l=j;
}

n=z;
}

printf("%d",l);
}

这段代码目的是查找文件中的“abc”,然后将个数 l 输出。

算法是先把文件中的每个字符(除了最后两个)与a比较,再把符合的,取地址加一,取内容后与b比较,再如此与c 比较。最后输出符合的个数。


搜索更多相关的解决方案: 文本编辑  

----------------解决方案--------------------------------------------------------

我刚把代码稍微改了一下:

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

void main()
{
int i=0,j=0,k=0,l=0,o=0;
char q[3]={'a','b','c'};
char *p,*m,**n,**z;
char ch = 0;
FILE *fp;
char filename[10];
p=q;

scanf("%s",filename);

if((fp=fopen(filename,"r"))==NULL){
printf("error open the file");
exit(0);
}

while(ch != -1)
ch=fgetc(fp);

j=ftell(fp);

m = (char *)malloc (j);

fseek(fp,1L,1);

for(i=j;i>=0;i--)
{
ch=fgetc(fp);
fseek(fp,-2L,1);
*(m+i)=ch;
}

for(i=0;i<j-2;i++)
if(*(m+i)==*p)k++;

n=(char **)malloc(k);

for(i=0;i<j-2;i++)
if(*(m+i)==*p){
*(n+l)=(m+i);
l++;
}

for(i=1;i<3;i++)
{
k=0;

for(j=0;j<l-(2-i);j++)
if(*(*(n+j)+1)=*(p+i))
k++;

z=(char **)malloc(k);

for(j=0;j<l-(2-i);j++)
if(*(*(n+j)+1)=*(p+i)){
*(z+o)=*(n+j);
o++;
}

n=(char **)malloc(k);
n=z;

l=o;
}

printf("%d\n",l);
}

不报错了,但是结果却不对,debug时,蓝字部分系统会要求我 find source.
不知道为什么????
再拜达人!


----------------解决方案--------------------------------------------------------