C语言中怎么判断一个字符串包含在另一个字符串里面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中怎么判断一个字符串包含在另一个字符串里面相关的知识,希望对你有一定的参考价值。
如:
定义字符数组a[30]="iamtired"
定义另一个字符数组b[100],输入字符串,判断a数组是否在b里面;是的话flag=1;否的话flag=0;
我要完整的代码
#include<string.h>
int main()
int flag;
char a[30]="iamtired";
char b[100];
scanf("%s",b);
if( strstr( b , a ) )
flag=1;
else
flag=0;
printf("flag=%d\\n", flag );
return 0;
参考技术A
由于c语言自身不知吃match函数,也不支持正则表达式,因此只能够自己书写函数。但是这并不是绝对的,由于c语言很多的函数库,因此有个函数库可以找到你想要的内容。regex.h
,下载该函数库,并放在指定位置(视你的安装目录以及软件所定,详情百度),然后使用<include regex.h>。
该库里面有一个函数:
int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags);
typedef struct
regoff_t rm_so;
regoff_t rm_eo;
regmatch_t;
按照定义定义regmatch_t参数,然后传入就行。使用完之后,应该用void regfree(regex_t *preg);取消使用。
例子如下:
#include <stdio.h>;#include <sys/types.h>;
#include <regex.h>;
static char* substr(const char*str, unsigned start, unsigned end)
unsigned n = end - start;
static char stbuf[256];
strncpy(stbuf, str + start, n);
stbuf[n] = 0;
return stbuf;
int main(int argc, char** argv)
char * pattern;
int x, z, lno = 0, cflags = 0;
char ebuf[128], lbuf[256];
regex_t reg;
regmatch_t pm[10];
const size_t nmatch = 10;
pattern = argv[1];
z = regcomp(®, pattern, cflags);
if (z != 0)
regerror(z, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "%s: pattern '%s' \\n", ebuf, pattern);
return 1;
while(fgets(lbuf, sizeof(lbuf), stdin))
++lno;
if ((z = strlen(lbuf)) >; 0 && lbuf[z-1] == '\\n')
lbuf[z - 1] = 0;
z = regexec(®, lbuf, nmatch, pm, 0);
if (z == REG_NOMATCH) continue;
else if (z != 0)
regerror(z, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "%s: regcom('%s')\\n", ebuf, lbuf);
return 2;
for (x = 0; x < nmatch && pm[x].rm_so != -1; ++ x)
if (!x) printf("%04d: %s\\n", lno, lbuf);
printf(" $%d='%s'\\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));
regfree(®);
return 0;
如果不使用正则表达式,可以使用函数strstr,代码如下:
#include <stdio.h>#include <string.h>
int main()
char str1[] = "Hello World!";
char str2[] = "Hello";
if ( !strstr(str1,str2) )
printf("existed!");
else printf("Not find!");
return 0;
参考技术B #include <stdio.h>
#include<string.h>
int flag=0;
void main()
int f(char str1[],char str2[]);
char str1[20],str2[20],*s1,*s2;
printf("input string1:\n");
gets(str1);
s1=str1;
printf("input string2:\n");
gets(str2); /*str2为要验证的字串*/
s2=str2;
f(s1,s2);
if (flag==1)
printf("\nYES!\n\n");
else if (flag==0)
printf("\nNO!\n\n");
int f(char*s1,char*s2)
char *p,*q;
for(;*s1!='\0';s1++)
if (*s2==*s1) /*判断字符串中是否有和要判断的字串首字符相同的字符*/
flag=1;
p=s1 ; /*s1 p 为第一个相同字符的地址*/
q=s2;
for(;*q!='\0';) /*如果有则判断接下去的几个字符是否相同*/
if (*q++!=*p++)
flag=0;break;
if (flag==1)break;
return(flag);
参考技术C #include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
char a[30] = "iamtired";
char b[100];
int flag = 0;
printf("Please input a string:\n");
gets(b);
int i = 0;
int j = 0;
for (i = 0; i < strlen(b);i++)
if (b[i] != a[0])
continue;
for (j = 0; j < strlen(a);j++)
if (a[j] != b[i+j])
break;
if (strlen(a) == j)
flag = 1;
break;
printf("flag = %d", flag);
system("pause");
return 0;
参考技术D char flg;
char a[4] ="abc";
char b[3] ="ab";
flg = strstr (a,b)//判断b是否在a里 在的话flg=1,不在flg=0
c语言中如何判断输入的是不是数字?
这个程序不难写,我告诉你思路和算法,你根据这个编写代码就可以了。1.由于你输入的这一串数据可能都为数字,也可能包含其它字符,所以首先用一字符数组存放这个字符串。
2.用strlen函数计算这个字符串的长度,在此基础上借助for循环或while循环实现数组元素的遍历。
3.遍历每一个元素的同时用if语句判断这个元素的ascii码所在的范围是否在48~57之间,如果不在则中止循环,输出判断结果(即不是数字)。
4.如果最后一个元素仍然是数字,则整个字符串则为一个大数。 参考技术A 你写的这个有太多的错误。至于定义数组的时候a[n]这种错误我就不讲了
还有在循环里面(i=1;i<n;i++)
n没赋值就调用的错误我也不讲了
讲你的死循环问题
你没有给循环加一个限制条件
根据你continue的意思我暂时理解为
如果输入的不是数字
那么一直循环
重新输入
一直到你输入的是数字为止跳出循环
对吗?
while(1)
printf("请输入要查的值\n");
ret=scanf("%d",&n);
printf("ret=%d\n",ret);
if(ret==0)
printf("输入错误,请重新输入\n");
continue;
break;
这样就可以
如果输入的是数字
scanf的返回值为1
那么循环的第一次
不会进入if(ret==0)
也就是说
如果输入的是数字
直接执行break跳出循环
如果输入的不是数字
循环的时候执行语句if(ret==0)
然后执行continue
continue的意思是跳出当前循环继续下一次循环
即执行到continue之后从新循环而不会执行到break
以此类推
只要你输入的不是数字
则永远循环
输入的如果是数字
跳出循环
执行完毕。
大哥
如果小弟回答正常
给点分吧
多谢
=================================================================
另外对于一楼的同学
我必须有好的提醒你scanf()的用法以及返回值的相关问题
我想你肯定不知道
scanf("%d",&i)
如果你输入的是int型则返回1
否则返回0
换句话说即你输入的类型和scanf()里面预先定义的类型一致
则返回1
否则返回0
thank
you 参考技术B #include<stdio.h>
void
main()
unsigned
short
int
y;
printf("请输入1~3000年的任意一年:");
while(scanf("%u",&y)==1)
scanf("%u",&y);
if
(y<1||y>3000)printf("\n输入年份错误!\n\n");
else
if
((y%4==0&&y%100!=0)||(y%100==0&&y%400==0))printf("\n%u年是闰年!\n\n",y);
else
printf("\n%u年不是闰年!\n\n",y);
printf("请输入1~3000年的任意一年:");
以上是关于C语言中怎么判断一个字符串包含在另一个字符串里面的主要内容,如果未能解决你的问题,请参考以下文章