你的写法是判断两个指针地址是否相等,而不是指针指向的内容相同。
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
}