⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringmatch.cpp

📁 c++程序
💻 CPP
字号:
#include<iostream>
#include<cstring>
using namespace std;

char data[100][100];
int linenum;  //number of lines

void branch(char *);
void simpleout(char *);
void checkargu(char *);
void printline(int, int *);
int sic(const char* ,const char* ,unsigned int );

main(){
char sp[100];            //sp=search pattern;
int i=0;

cout<<"Input string (enter X to stop): ";
cin.getline(data[0],100);

while(strcmp(data[i],"X")!=0){
       i++;
       cout<<"Input string (enter X to stop): ";
       cin.getline(data[i],100);                       
                             
                              }
linenum=i-1;

cout<<"Search pattern: ";
cin.getline(sp,100);

branch(sp);

getchar();
       
}


void branch(char *sp){
int withargu;  //with argument

if(strstr(sp,"/")==0)     {
        withargu=0;
        simpleout(sp);                  
                          }     
else {
     withargu=1;
     checkargu(sp);
     }     
     
}


void simpleout(char *sp){
     
int i,t=0;  //t=match numbers
int db[100];   //the index numbers of found lines

for(i=0;i<=linenum;i++){
      if (strstr(data[i],sp)!=0)   db[t++]=i;                
                        }     
     
printline(t-1,db);  //t-1 is the maximun index of db    
     
}


void checkargu(char *sp){
     
int i,j,k,m,q,r=0,insensi=0,begin=0,end=0,any=0;
char letter[50][100]; //letters in sp if any==1
     
 for(i=0;*(sp+i)!='/';i++) ;
 
 *(sp+i)='\0';
 for(i++;*(sp+i)!='\0';i++){
       if(*(sp+i)=='i')  insensi=1;
       else if(*(sp+i)=='b')  begin=1;                 
       else if(*(sp+i)=='e')  end=1;
       else if(*(sp+i)=='a')  any=1;                 
                            
                            }    
     
//execution is below

if(any){
      for(i=0;*(sp+i)!='\0';i++)    
         {letter[i][0]=*(sp+i);  letter[i][1]='\0';}
           }     
else {strcpy(letter[0],sp); i=1;     }

i--;  //now i is the maximum row index of letter[]

int (*fp)(const char *,const char *,unsigned int);
char temp[50];
char outline[50][100];
unsigned int len;
int beginn,endn;

if(insensi) fp=sic;
else fp=strncmp;

for(j=0;j<=i;j++){
     len=strlen(letter[j]); 
     for(q=0;q<=linenum;q++){
         if(data[q][0]=='\0') continue; 
         if (begin==1) endn=0;
         else endn=strlen(data[q])-len; 
         if (end==1) beginn=strlen(data[q])-len;
         else beginn=0;                  
         for(m=beginn;m<=endn;m++) {           

                 for(k=0;k<=len-1;k++)  
                    {temp[k]=data[q][m+k];  }
                 temp[k]='\0';
                 if((*fp)(temp,letter[j],len)==0)    {strcpy(outline[r++],data[q]);
                                                  data[q][0]='\0';
                                                  break;}     
                  
                      }
                             }
                  }

cout<<"Number of matched strings: "<<r<<endl;
for(i=0;i<=r-1;i++)
   cout<<outline[i]<<endl;     
     
}

void printline(int n, int *db){
     
int i;

cout<<"Number of matched strings: "<<n+1<<endl;

for(i=0;i<=n;i++)
   cout<<data[*(db+i)]<<endl;
     
}

int sic(const char* datastr,const char* cmdstr,unsigned int len){
    
int i;

for(i=0;i<=len;i++){
         if (('a'<=*(datastr+i))&&('z'>=*(datastr+i))){
               if((*(datastr+i)!=*(cmdstr+i))&&(*(datastr+i)-32!=*(cmdstr+i)))  break;                                      
                                                       }  
         else if((*(datastr+i)!=*(cmdstr+i))&&(*(datastr+i)+32!=*(cmdstr+i)) ) break;                                                      
                    }    
if (i<=len) return(1);
else return(0);    
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -