问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

C语言 字符串匹配

发布网友 发布时间:2022-05-01 11:39

我来回答

3个回答

热心网友 时间:2023-10-10 06:20

#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;
}

热心网友 时间:2023-10-10 06:20


#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<KEYNUM)
{
if((ch=getchar())!=EOF)
{
if(ch!='\n'&&j<KEYLEN)
key[i][j++]=ch;
else
{
key[i][j]='\0';
i++;
j=0;
}
}
}
///*如关键字已指定,中间这段代码变注释-------*/
p=getline(MAXCHAR);
if(cmp(key,p))
while(*p!='\0')
putchar(*p++);
return 0;
}

char * getline(int num)
/*最多接收num个字符,返回字符串首地址,为了方便,把接收的字符数组变成全局变量*/
{
int i=0,ch;
while((ch=getchar())!=EOF&&ch!='\n'&&i<num)
a[i++]=ch;
a[i]='\0';
return a;
}

int cmp(char (*s)[KEYLEN], char *t)
/*用字符串t和关键字列表比较,如果匹配,返回所匹配的关键字列表序号,如不匹配,返回0 */
{
int i,flag=0;
char *p,*q;
for(i=0;i<KEYNUM;i++)
{
for(p=s[i],q=t;*q!='\0'&&*p!='\0';)
{
if(*p++==*q++)
flag=1;
else
{
flag=0;
break;
}
}
if(flag)
return i+1;
}
return 0;
}

热心网友 时间:2023-10-10 06:20

#include<stdio.h>
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]=='\n'){str[i]='\0';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;k<n;k++)putchar(str[k]); //输出
putchar('\n');
break;

}
}
return 0;
}

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
分享iphonexr开启个人热点的操作步骤 CF万圣节出了哪些东西 CF万圣节活动2023入口网址 2023穿越火线万圣节活动地址链接 CF万圣节哪些装备可能会出? 怎么解决代理服务器没有响应错误? 电脑音响和耳机怎么同时使用? 耳机和音响怎么同时使用 耳机和音响怎么同时使用win10 怀孕了睡不着觉怎么办 怀孕了睡不着怎么调节 怀孕中期睡不着怎么办 女生说我可能要用筷子了什么意思? EXCEL字符匹配问题 ...俩过日子要像一双筷子:一是谁也离不开谁;二是什么酸甜苦辣都能在一... ...过日子要像一双筷子:一是 谁也离不开谁;二是什么酸甜苦辣都能一起... 字符串匹配算法是怎么算的? 老公跟老婆闹矛盾晚上睡觉那双筷子放在被面是什么意思? 怎样匹配两个特定字符间的内容? 陪嫁筷子和酒盅什么意思? 夫妻两个一双红筷,一双黑筷什么意思? 为什么把夫妻比作一双筷子呢? LCD屏和OLED屏幕怎么区分? 诈骗金额2千元群发5万条骗人信息如何定罪 中文字符匹配怎么做 夫妻分筷说明什么? 短信群发会有什么法律责任 华为手机怎么开起淘宝网同步设置 夫妻就像一双筷子,谁说的 短信诈骗案发送信息一万多条会判多久,诈骗金额4万多块会判多久 为什么说夫妻就像一双筷子呢? 群发短信30万条未获利被抓犯什么罪 日本miyachi焊接机多少钱 请问“夫妻”是什么? 字符串的匹配(JAVA) 国外好的激光焊接机有哪些? 字符串匹配(正则表达式) lcd oled屏幕区别 LCD和OLED这两个屏幕怎么区分呢? 如何区分LCD和OLED这两个屏幕? 华为荣耀9图标颜色怎么改 荣耀9控制栏图标颜色怎么更改? 抖音游戏入驻什么意思 入驻一个平台有什么要求吗 华为荣耀9青春版出现很多应用小图标? 入驻企业是什么意思 车险费改后车损险包含哪些 商业车险费改后条款的创新 车险改革后保险条款区别 苹果充电口松了怎么办 苹果充电端口松动。怎么弄 单桶洗衣机怎么进水玉脱水?
  • 焦点

热门图文

猜你喜欢