程序实现功能: 问题描述】对任意输入的一串字符,在某文档中进行匹配,并给出匹配结果。
【测试数据】
(1)输入的一行程序,与源代码匹配,源程序自行选择;
(2)输入的一串字符,在某文本文件中匹配,文本文件自行选择。 这个程序写了大概6个小时。虽然才50多行。但是但凡涉及到文件和字符串的,必然要耗很久。。这一块有太多要注意的了。下面是源代码~
【测试数据】
(1)输入的一行程序,与源代码匹配,源程序自行选择;
(2)输入的一串字符,在某文本文件中匹配,文本文件自行选择。 这个程序写了大概6个小时。虽然才50多行。但是但凡涉及到文件和字符串的,必然要耗很久。。这一块有太多要注意的了。下面是源代码~
1 #include2 #include 3 #include 4 #define size 10000 5 int main() 6 { 7 FILE *fp; 8 int i=0,j=0,l,len,tag[size],enter[size],a,w=0,te=0; 9 char filename[100],T[size],*out,*q,*temp;10 printf("请输入你想要匹配的字符串:\n");11 gets(T);12 printf("请输入你要匹配的文件路径:\n");13 scanf("%s",filename);14 if((fp=fopen(filename,"r"))==NULL)15 {16 printf("找不到文件路径!\n");17 exit(0);18 }19 len=strlen(T);20 fseek(fp,0L,SEEK_END);21 l=ftell(fp);22 out=(char *) malloc(sizeof(char) * l+1);23 fseek(fp, 0L, SEEK_SET); 24 fread(out,l,sizeof(char),fp);25 out[l]=0;26 q=out;27 fclose(fp);28 while(*q!=0)29 {30 31 if(*q==T[0])32 {33 temp=q;te=0;34 for(a=1;a35 {36 q++;37 if(*q=='\n')38 q++;39 if(*q!=T[a])40 {41 te=1;a=len;42 }43 }44 if(te==0)45 {46 tag[i]=j;47 enter[i]=w+1;48 i++;49 }50 q=temp;51 }52 j++;53 if(*q=='\n')54 {55 w++;56 j=0;57 }58 q++;59 }60 61 if(i)62 {63 printf("匹配成功!\n该字符串所在位置为:\n");64 for(a=0;a65 printf("第%d行 第%d列\n",enter[a],tag[a]);66 }67 else68 printf("匹配失败!");69 printf("\n");70 return 0;71 }
这个程序要注意和要值得反思的是 1:开始用了getc和feof来把整个文件放到字符串里,一直出“烫”,找不到毛病,最后用了ftell。还是出“烫”。原因是之前一直没加这一句“ out[l]=0;”这样才是字符串的正规结束 2:字符数组和字符指针的区别和用法,之前一直搞不清楚。现在明白了。具体的区别发在了上一篇文章里,我总结几个自己经常忽略的点。第一:不管是字符数组还是指针,都可以用p[1]p[2],这样的形式。 第二:字符数组只能在初始化时用char str[]="jia",而不能char str[20].str[]="fjas"; 第三;字符指针,只是代表的是字符串的首地址,而字符数组是存的整个字符串 还有很多、、、待续 2013.12.26 更新说明: 1:修复了换行显示不准的情况 2:修复了关于关键字存在于两行之间的情况 2014年1月2日