C语言怎么实现字符串的匹配?

Python030

C语言怎么实现字符串的匹配?,第1张

p=="delete"要改成用strcmp(p, "delete") == 0 来进行字符串匹配。

你的写法是判断两个指针地址是否相等,而不是指针指向的内容相同。

p和"delete"的地址原本就不相等,一个指向了栈上分配了10个字节的空间,空间的内容是"delete",另一个指向了常量区的"delete"。

请采纳,谢谢

晕!这就是最简单的了,你把

头文件

string.h包含起来调用strstr()函数就完成了。

string.h的

库函数

strstr()帮你完成此项功能,strstr()的功能就是在一个字符串中查找另一个字符串。下面是测试函数及strstr()函数。

#include

#include

#include

int

main(void)

/*测试strstr()*/

{

char

*A="abcdefghi",*B,*C

B

=

(char*)malloc(10)

memset(B,

0,

sizeof(B))

C

=

(char*)malloc(10)

memset(C,

0,

sizeof(C))

B[0]='f'B[1]='g'B[2]='h'

C

=

strstr(A,B)

printf("A=\"%s\"\n",A)

printf("B=\"%s\"\n",B)

printf("C=\"%s\"\n",C)

return

0

}

#if

0

/*strstr()函数的

返回值

为s中匹配字窜的地址*/

char

*

strstr

(

const

char

*

s,

/*

string

to

search

*/

const

char

*

find

/*

substring

to

look

for

*/

)

{

char

*t1

char

*t2

char

c

char

c2

if

((c

=

*find++)

==

0)

/*

an

empty

string

*/

return

((char

*)(s))

for

()

{

while

(((c2

=

*s++)

!=

0)

&&

(c2

!=

c))

if

(c2

==

0)

return

(NULL)

t1

=

(char

*)(s)

t2

=

(char

*)(find)

while

(((c2

=

*t2++)

!=

0)

&&

(*t1++

==

c2))

if

(c2

==

0)

return

((char

*)(s

-

1))

}

}

#endif

#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

}