C语言 字符串匹配

C语言 字符串匹配,第1张

#include <stdio.h>

  

const char key[][12] = { "happy", "new", "year", "2014" }

 

// 是否完全匹配某一个特定的 key 

int match1(const char *s, const char *t)

{

  while (*s && *t && *s++ == *t++)

  return !(*s || *t)

}

  

// 是否匹配一组 key 的中一个 

int match(const char *s)

{

  int i, j

  for (i = 0 i < sizeof key / sizeof key[0] i++)

    if (match1(s, key[i]))

    {

      // 如果匹配到某个 key,则打印匹配到的 key 

      for (j = 0 key[i][j] j++)  putchar(key[i][j])

      putchar('\n')

      return 1

    }

  return 0

}

  

int main()

{

  char s[BUFSIZ]

  int i, k

 

  // 输入一个字符串

  for (i = 0 i < BUFSIZ && (s[i] = getchar()) != '\n' i++)

  s[i] = '\0'

  match(s)

  return 0

}

以上程序是判断输入的字符串是否是某个 key 中的一个。

如果不要求完全匹配,而是要求检测输入的字符串是否含有某个 key,则程序如下:

#include <stdio.h>

  

const char key[][12] = { "happy", "new", "year", "2014" }

 

// 是否含有某一个特定的 key 

int match1(const char *s, const char *t)

{

  const char *p, *q, *r

  for (p = s, q = t *p && *q p = r, q = t)

  {

    for (r = p + 1 *p == *q p++, q++)

    if (*q == '\0') return 1

    if (*p == '\0') return 0

  }

  return 0

}

  

// 是否含有一组 key 的中一个 

int match(const char *s)

{

  int i, j

  for (i = 0 i < sizeof key / sizeof key[0] i++)

    if (match1(s, key[i]))

    {

      // 如果匹配到某个 key,则打印匹配到的 key 

      for (j = 0 key[i][j] j++)  putchar(key[i][j])

      putchar('\n')

      return 1

    }

  return 0

}

  

int main()

{

  char s[BUFSIZ]

  int i, k

 

  // 输入一个字符串

  for (i = 0 i < BUFSIZ && (s[i] = getchar()) != '\n' i++)

  s[i] = '\0'

 

  if (match(s))

  {

    // 如果匹配到某个 key,则打印输入的原始字符串 

    for (k = 0 k < i k++) putchar(s[k])

    putchar('\n')

  }

  return 0

}

按照你的要求编写的匹配程序如下

using System 

using System.Text.RegularExpressions 

namespace MatchApplication{ 

 class MatchClass{ 

  static void Main(string[] args){ 

   string s="descr: CHINA UNICOM Shanghai city network\ndescr: China Unicom\ndescr: No.21,Jin Rong Street,Beijing,100033\ndescr: P.R.China\ncountry: CN" 

   MatchCollection mc =Regex.Matches(s, @"descr:([\s\S]*?)(?=descr|country|$)",RegexOptions.IgnoreCase) 

   foreach (Match m in mc){ 

    Console.Write(m.Groups[1].Value) 

   } 

   Console.ReadKey() 

  } 

 } 

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7797711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存