C语言 字符串匹配
答案:3 悬赏:40 手机版
解决时间 2021-02-03 10:47
- 提问者网友:箛茗
- 2021-02-02 12:08
C语言 字符串匹配
最佳答案
- 五星知识达人网友:慢性怪人
- 2021-02-02 13:03
#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;
}
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;
}
全部回答
- 1楼网友:拜訪者
- 2021-02-02 14:30
#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!=' '&&j
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!=' '&&i
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;
}
- 2楼网友:慢性怪人
- 2021-02-02 14:17
#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;k putchar('
');
break;
}
}
}
return 0;
}
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;k
break;
}
}
}
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯