21xrx.com
2024-11-22 09:52:57 Friday
登录
文章检索 我的文章 写文章
用于模式匹配的 C 程序
2021-07-08 09:08:22 深夜i     --     --

C中的模式匹配:C程序检查一个字符串是否存在于另一个字符串中,例如,字符串“programming”出现在字符串“Cprogramming”中。 如果它存在,那么它的位置(即它在哪个位置)被打印出来。 我们创建了一个函数 match,它接收两个字符数组并在匹配发生时返回位置,否则返回 -1。 我们正在这个程序中实现朴素的字符串搜索算法。

 

C程序

#include <stdio.h>
#include <string.h>


int match(char [], char []);

int main() {
  char a[100], b[100];
  int position;

  printf("Enter some text\n");
  gets(a);

  printf("Enter a string to find\n");
  gets(b);

  position = match(a, b);

  if (position != -1) {
    printf("Found at location: %d\n", position + 1);
  }
  else {
    printf("Not found.\n");
  }

  return 0;
}

int match(char text[], char pattern[]) {
  int c, d, e, text_length, pattern_length, position = -1;

  text_length    = strlen(text);
  pattern_length = strlen(pattern);

  if (pattern_length > text_length) {
    return -1;
  }

  for (c = 0; c <= text_length - pattern_length; c++) {
    position = e = c;

    for (d = 0; d < pattern_length; d++) {
      if (pattern[d] == text[e]) {
        e++;
      }
      else {
        break;
      }
    }
    if (d == pattern_length) {
      return position;
    }
  }

  return -1;
}

 

程序输出:

下载模式匹配程序。

使用指针进行模式匹配的 C 程序

#include<stdio.h>


int match(char*, char*);

int main()
{
   char a[100], b[100];
   int position;
   
   printf("Enter some text\n");
   gets(a);
       
   printf("Enter a string to find\n");
   gets(b);
   
   position = match(a, b);
   
   if(position!=-1)
      printf("Found at location %d\n", position+1);
   else
      printf("Not found.\n");
     
   return 0;  
}

int match(char *a, char *b)
{
   int c;
   int position = 0;
   char *x, *y;
   
   x = a;
   y = b;
   
   while(*a)
   {
      while(*x==*y)
      {
         x++;
         y++;
         if(*x=='\0'||*y=='\0')
            break;        
      }  
      if(*y=='\0')
         break;
         
      a++;
      position++;
      x = a;
      y = b;
   }
   if(*a)
      return position;
   else  
      return -1;  
}

 

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复