p=="delete"要改成用strcmp(p, "delete") == 0 來(lái)進(jìn)行字符串匹配。
創(chuàng)新互聯(lián)主營(yíng)懷寧網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),懷寧h5微信平臺(tái)小程序開發(fā)搭建,懷寧網(wǎng)站營(yíng)銷推廣歡迎懷寧等地區(qū)企業(yè)咨詢
你的寫法是判斷兩個(gè)指針地址是否相等,而不是指針指向的內(nèi)容相同。
p和"delete"的地址原本就不相等,一個(gè)指向了棧上分配了10個(gè)字節(jié)的空間,空間的內(nèi)容是"delete",另一個(gè)指向了常量區(qū)的"delete"。
請(qǐng)采納,謝謝
如果是字符數(shù)組,可以使用strstr函數(shù)查找匹配。
strstr() 函數(shù)搜索一個(gè)字符串在另一個(gè)字符串中的第一次出現(xiàn)。找到所搜索的字符串,則該函數(shù)返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,則返回NULL。
包含文件:string.h
函數(shù)名: strstr
函數(shù)原型:
extern char *strstr(char *str1, const char *str2);
語(yǔ)法:
char * strstr(str1,str2)
str1: 被查找目標(biāo) string expression to search.
str2: 要查找對(duì)象 The string expression to find.
返回值:若str2是str1的子串,則先確定str2在str1的第一次出現(xiàn)的位置,并返回此str1在str2首位置的地址。;如果str2不是str1的子串,則返回NULL。
如果是普通類型的數(shù)組,需要使用雙重循環(huán)來(lái)實(shí)現(xiàn)匹配。
例如:
int?a[10]={0,1,2,3,4,5,6,7,8,9,0};
int?b[3]={5,6,7};
int?i,j;
for(i=0;i7;i++){
for(j=0;j3;j++)?if(a[i+j]!=b[j])?break;?//進(jìn)行匹配,如果其中一個(gè)不匹配,中斷循環(huán)。
if(j==3){????//尋找到匹配
printf("匹配!");
break;
}
}
if(i==7){????//循環(huán)完仍未找到匹配
printf("不匹配!");
}
復(fù)制相關(guān)函數(shù):memcpy、memmove、strcpy、strncpy
字符串連接函數(shù):strcat、strncat
字符串比較函數(shù):memcmp、strcmp、strcoll、strncmp、strxfrm、
查找函數(shù):memchr、strchr、strcspn、strpbrk、strrchr、strspn、strstr、strtok
其他相關(guān)函數(shù):memset、strerror、strlen
#include?stdio.h
const?char?key[][12]?=?{?"happy",?"new",?"year",?"2014"?};
//?是否完全匹配某一個(gè)特定的?key?
int?match1(const?char?*s,?const?char?*t)
{
while?(*s??*t??*s++?==?*t++);
return?!(*s?||?*t);
}
//?是否匹配一組?key?的中一個(gè)?
int?match(const?char?*s)
{
int?i,?j;
for?(i?=?0;?i??sizeof?key?/?sizeof?key[0];?i++)
if?(match1(s,?key[i]))
{
//?如果匹配到某個(gè)?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;
//?輸入一個(gè)字符串
for?(i?=?0;?i??BUFSIZ??(s[i]?=?getchar())?!=?'\n';?i++);
s[i]?=?'\0';
match(s);
return?0;
}
以上程序是判斷輸入的字符串是否是某個(gè) key 中的一個(gè)。
如果不要求完全匹配,而是要求檢測(cè)輸入的字符串是否含有某個(gè) key,則程序如下:
#include?stdio.h
const?char?key[][12]?=?{?"happy",?"new",?"year",?"2014"?};
//?是否含有某一個(gè)特定的?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?的中一個(gè)?
int?match(const?char?*s)
{
int?i,?j;
for?(i?=?0;?i??sizeof?key?/?sizeof?key[0];?i++)
if?(match1(s,?key[i]))
{
//?如果匹配到某個(gè)?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;
//?輸入一個(gè)字符串
for?(i?=?0;?i??BUFSIZ??(s[i]?=?getchar())?!=?'\n';?i++);
s[i]?=?'\0';
if?(match(s))
{
//?如果匹配到某個(gè)?key,則打印輸入的原始字符串?
for?(k?=?0;?k??i;?k++)?putchar(s[k]);
putchar('\n');
}
return?0;
}