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

📄 regexp.c

📁 我自己做的一个法语动词变位的小程序,LINUX下运行以测.输入动词原形就可自动输出动词的全部变位.我做了好长时间,希望有兴趣的朋友一起分享
💻 C
字号:
#include<regex.h>#include<stdio.h>#include<string.h>int verif_motif(const char * streg, char * strg){  regex_t regexp; //initialisation d'une valeur régulière  if (regcomp(&regexp, streg,REG_EXTENDED)!=0) //compilation en valeur régulière           {printf("");}  else    {size_t n=regexp.re_nsub; //recuperation du nombre de motifs reconnus    regmatch_t *pmatch=malloc(sizeof(*pmatch)*n); //initialisation du tableau contenant les motifs    if (regexec(&regexp,strg,n,pmatch,REG_NOTBOL)==0)      {	return 1; //si la recherche réussit, alors on retourne 1      }    else      {return 0;} // sinon on retourne 0    }}void deb_motif(const char * streg, char * strg, int deb, char * motif){  regex_t regexp; //initialisation d'une valeur régulière  if (regcomp(&regexp, streg, REG_EXTENDED)!=0) //compilation en valeur régulière     {printf("");}  else    {      size_t n=regexp.re_nsub; //récuperation du nombre de motifs reconnus      regmatch_t * pmatch=malloc(n*sizeof(*pmatch)); //initialisation du tableau contenant les motifs      if (regexec(&regexp,strg,n+1,pmatch,0)==0)	{	  deb=pmatch[1].rm_so; //récupération de l'emplacement du début du motif reconnu	  if (n>0){	    int deb_sou=pmatch[1].rm_so;	    int fin=pmatch[1].rm_eo;//récupération de l'emplacement de la fin  du motif reconnu	    int taille=fin-(deb_sou);	    strncpy (motif, &strg[deb_sou],taille); //copie du motif reconnu dans une chaine	    motif[taille]='\0';} //Ajout du caractère de fin de chaine	}      else {motif[0]='\0';}    }}char * rempl_motif(char * a_remplacer, char * substitut, char * streg,char * retour){  regex_t regexp; //initialisation d'une valeur régulière  if (regcomp(&regexp, streg, REG_EXTENDED)!=0) //compilation en valeur régulière    {      printf("la compilation de l'expression régulière a échoué\n");    }  else    {      size_t n=regexp.re_nsub; //recuperation du nombre de motifs reconnus      regmatch_t * pmatch=malloc(n*sizeof(*pmatch)); //tableau contenant les motifs      if (regexec(&regexp,a_remplacer,n+1,pmatch,0)==0)	{	  int deb, i, j;	  retour[0]='\0';	  if(n>0) //Si la chaine contient un sous-motif, on le récupère	    {	      deb_motif(streg,a_remplacer,deb,retour);	    }	  int debut=pmatch[0].rm_so;	  int longu_subst1=strlen(substitut);	  int longu_motif=strlen(retour);	  int cpt=0;/*Remplacement dans la chaine de substitution des $ par le sous-motifs*/	  for (i=0;i<longu_subst1;i++)	    {	      if (substitut[i]=='$')		{		  if (longu_motif<=1)		    {substitut[i]=retour[0];}		  else 		    {		      char tmp[longu_subst1+longu_motif];		      for (j=0;j<i;j++)			{tmp[j]=substitut[j];}		      for (j=0;j<longu_motif;j++)			{tmp[i+j]=retour[j];}		      for(j=0;j<((longu_subst1-1)+longu_motif);j++)			{tmp[i+longu_motif+j]=substitut[i+1+j];}		      strcpy(substitut,tmp);		    }		}	    }	  int longu_subst=strlen(substitut);	  int longu_remp=strlen(a_remplacer);	  char * remp_long=malloc((debut+longu_subst+1)*sizeof(char));	  for (i=0;i<=debut;i++)	    {remp_long[i]=a_remplacer[i];}	  for (i=0;i<longu_subst;i++)	    {remp_long[debut+i]=substitut[i];}	  remp_long[debut+longu_subst]='\0';	  strcpy(retour,remp_long);	  free(remp_long);	  return retour;	}    }}

⌨️ 快捷键说明

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