• 当前位置:首页>>C语言>>C语言编程实例>>小型的文本编辑器(使用能通配符*和?)
  • 小型的文本编辑器(使用能通配符*和?)
  • 小型的文本编辑器(使用能通配符*和?)使用时确保你要处理的文件在当前工作目录下。
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>

    typedef struct {
       char word[20];
       int length;
    }wordtype;
    wordtype seekword;            /*seekword用来放要查找的词*/
    wordtype save;                /*save用来临时成放从文件中读出的词*/

    int check(char ch)            /*检查是否是合法的字符*/
    {
      if(ch<='9'&&ch>='0'||ch<='z'&&ch>='a'||ch<='Z'&&ch>='A')
        return 1;
      else
        return 0;

    }

    void length()              /*计算seekword 和save中的word[]的长度*/
    {
      int i;

      seekword.length=0;
      save.length=0;
      for(i=0;seekword.word[i]!='\0';i++)
            ;
      seekword.length=i;
      for(i=0;save.word[i]!='\0';i++)
            ;
      save.length=i;
    }

    int compare()                  /*比较save和seekword中的word[]是否匹配,若匹配返回1,否则返回0* /
    {
      int length1,length2,i,j,flag1,flag2,breakpoint;
      char segment1[20],segment2[20],ch;

      if (seekword.length<=save.length){     
          for(i=0;i<20;i++){
              if(seekword.word[i]=='?'||seekword.word[i]=='*'){             
                   ch=seekword.word[i];
                   breakpoint=i;
              }
          }
                 
          if(ch=='?'||ch=='*'){
             
              for(i=0;i<breakpoint;i++)
                   segment1[i]=seekword.word[i];
              length1=breakpoint;
              segment1[i]='\o';
              for(j=breakpoint+1,i=0;j<seekword.length;j++,i++)
                   segment2[i]=seekword.word[j];
              segment2[i]='\0';
              length2=i;
              flag1=flag2=0;
              for(i=0;i<length1;i++)
                 if(segment1[i]!=save.word[i]){
                       flag1=-1;
                       break;
                 }
              if(flag1!=-1){
                  if((breakpoint==seekword.length-1)&&(ch=='?')){
                       if(save.length==seekword.length)
                             return 1;
                       else
                             return 0;
                  }
                  for(i=0,j=save.length-length2;i<length2&&j<save.length;i++,j++)
                       if(segment2[i]!=save.word[j]){
                             flag2=-1;
                             break;
                       }
              }
              if(flag1==0&&flag2==0)
                  return 1;
              else
                  return 0;     
          }
          else{
              if(strcmp(save.word,seekword.word)==0)
                  return 1;
              else
                  return 0; 
          }  
       
      }        
         
      else
           return 0;

    [1] [2] [3] [4] 下一页