永发信息网

C语言 字符串匹配

答案:3  悬赏:40  手机版
解决时间 2021-02-03 10:47
C语言 字符串匹配
最佳答案
#include 
  
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('
');
      return 1;
    }
  return 0;
}
  
int main()
{
  char s[BUFSIZ];
  int i, k;
 
  // 输入一个字符串
  for (i = 0; i < BUFSIZ && (s[i] = getchar()) != '
'; i++);
  s[i] = '';
  match(s);
  return 0;
}以上程序是判断输入的字符串是否是某个 key 中的一个。




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

#include 
  
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 == '') return 1;
    if (*p == '') 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('
');
      return 1;
    }
  return 0;
}
  
int main()
{
  char s[BUFSIZ];
  int i, k;
 
  // 输入一个字符串
  for (i = 0; i < BUFSIZ && (s[i] = getchar()) != '
'; i++);
  s[i] = '';
 
  if (match(s))
  {
    // 如果匹配到某个 key,则打印输入的原始字符串 
    for (k = 0; k < i; k++) putchar(s[k]);
    putchar('
');
  }
  return 0;
}
全部回答

#define KEYNUM 4
#define KEYLEN 12
#define MAXCHAR 100
char a[MAXCHAR+1];
char * getline(int);
int cmp(char (*)[], char *);
int main()
{
char key[KEYNUM][KEYLEN]; //如关键字未指定,要求自己输入,则用这一行代码
//char key[KEYNUM][KEYLEN]={"main","char","while","float"}; //如关键字已指定,用这行并修改。 
char *p;
int i=0,j=0,ch;
//如关键字未指定,要求自己输入,则需要while这段代码 

while(i {
if((ch=getchar())!=EOF)
{
if(ch!=' '&&jkey[i][j++]=ch;
else
{
key[i][j]='';
i++;
j=0;
}
}
}
//
p=getline(MAXCHAR);
if(cmp(key,p))
while(*p!='')
putchar(*p++);
return 0;
}
char * getline(int num)

{
int i=0,ch;
while((ch=getchar())!=EOF&&ch!=' '&&ia[i++]=ch;
a[i]='';
return a;
}
int cmp(char (*s)[KEYLEN], char *t)

{
int i,flag=0;
char *p,*q;
for(i=0;i {
for(p=s[i],q=t;*q!=''&&*p!='';)
{
if(*p++==*q++)
flag=1;
else
{
flag=0;
break;
}
}
if(flag)
return i+1;
}
return 0;
}
#include
int main()
{
int i,j=0,k,n=0;
char a[4][12]={"one","two","three","four"};
char str[12];
for(i=0;i<12;i++)
{
str[i]=getchar(); //输入
n++; //计算长度
if(str[i]==' '){str[i]='';break;} //加上结束标志
}
for(i=0;i<4;i++)
{
if(a[i][0]==str[0]) //如果首字母匹配
{
while(str[j]==a[i][j]){j++;} //逐个匹配
if(j==n) //如果完全匹配
{
for(k=0;kputchar(' ');
break;

}
}
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问农历1993年出生于8月24日的是什么星座?
魔兽世界钓鱼日常给的不寻常的指南针有什么用
室内停车场地址有知道的么?有点事想过去
【笨,不理解汽车的额定功率为60KW,在水平路面
驵骥的意思是什么啊?知道的请说下!
我感觉我被冷落了怎么办
医生让后天早上去医院抽血,明天晚上8点之后
碧水豪园停车场(桃花路666号碧水豪园停车场)
侈谈的意思是什么啊?知道的请说下!
新东方凤凰城C区我想知道这个在什么地方
诺亚信 noain m6 6 9这手机什么好吗
财富大厦停车场(东宁路与政和街交叉口东150米
没有考过二级建造师,可以直接报考一级建造师
三星I739 移动卡可以用吗
鑫星服饰城怎么去啊,有知道地址的么
推荐资讯
停车场(东市南街)地址在什么地方,我要处理点
粥鼎记怎么去啊,有知道地址的么
金舞艺术中心地址在什么地方,我要处理点事
游戏宗派名字
根据关税的现行规定,下列表述正确的有()。A.
奇点牛排地址在什么地方,想过去办事
裕强纺织有限公司地址有知道的么?有点事想过
【冖的字有哪些】冖的字有哪些
迷牛寺村我想知道这个在什么地方
老公给我发了5,20红包,然后又给我不认识的
中国信合ATM(下初信用社)地址在什么地方,想
python 如何做到自增 或自减 比如a是0然后 实
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?