当前位置:首页 » 编程语言 » c语言怎么判断b是不是a的子串
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言怎么判断b是不是a的子串

发布时间: 2022-06-21 02:39:16

1. 用c语言判断一个字符串是否是另一个字符串的子串 不是返回0 是返回这个子串在另一字符串中位置

#include"stdio.h"
#include<string.h>
intf(char*a,char*b){
char*p=strstr(a,b);
returnp?p-a:-1;
}
intmain(intargv,char*argc[]){//验证主函数
char*a="1234567890",*b="4567";
(x=f(a,b))>=0?printf("%d ",x):printf("Nooverlap... ");
//printf("%d ",strcspn(a,b));//这是调用库函数直接求得
return0;
}

运行结果:

2. 输入二个字符串a和b,判断字符串b是否是字符串a的子串,是则输出b串在a串中的开始位置;否则输出-1。例如

#include<stdio.h>
int p(char a[],char b[])
{
int i=0,j=0,k=0;
for(i=0;a[i];i++)
{
j=i;
for(k=0;a[j]==b[k]&&b[k]&&a[j];j++,k++);
if(!b[k])
return ++i;
}
return -1;
}
int main(void)
{
char a[100],b[100];
gets(a);
gets(b);
printf("%d\n",p(a,b));
return 0;
}

3. C语言判断一个字符串是否是另一个字符串的子串

1、首先,定义两个整型变量,保存判断的数和同构串计数。

4. 输入二个字符串a和b,判断字符串b是否是字符串a的子串,是则输出b串在a串中的开始位置否则输出-1(C语言)

有现成的为何不用?

函数名: strstr
函数原型:extern char *strstr(char *str1, char *str2);
功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。
返回值:返回该位置的指针,如找不到,返回空指针。

5. C语言题目:判别一个字符串是否是另一个字符串的子串,若是子串输出子串第一次出现的位置,若不是则输出-1

#include<stdio.h>
intmain()
{
inti,j;
chara[100],b[100];

gets(a);
gets(b);

for(i=0;a[i]!='';i++)
{
if(a[i]==b[0])
{
intk;
for(k=i+1,j=1;b[j]!='';j++,k++)
{
if(a[k]!=b[j])
break;
}
if(b[j]=='')
{
printf("%d ",i);
break;
}
}
}
if(a[i]=='')
printf("-1 ");
return0;
}

6. C语言程序,判断一个字符串是否是另一个字符串的子串,如是则输出第一次出现的位置

#include<stdio.h>
#include<string.h>
intiszstr(char*str,char*zstr);//zstr是str的子串返回出现的位置下标,否则返回-1
intmain()
{
intrenum;
charstr[100],zstr[100];
while(1)
{
str[0]=zstr[0]=0;
printf("输入母串:");
scanf("%s",str);
printf("输入可能的子串:");
scanf("%s",zstr);
renum=iszstr(str,zstr);
if(renum<0)
printf("不是子串! ");
else
printf("是子串,起始位置在下标%d处! ",renum);
}

return0;
}
intiszstr(char*str,char*zstr)
{
char*p1=str,*p2=NULL,*pSave=NULL,flag;
while(*p1)
{
if(*p1==zstr[0]&&strlen(p1)>=strlen(zstr))//先找到对应的首字符位置
{
pSave=p1;
p2=&zstr[0];
flag=1;
while(*p2)
{
if(*p1!=*p2)
{
flag=0;
break;
}
p1++;
p2++;
}
if(flag==1)
{
returnpSave-&str[0];
}
else
p1=pSave;
}
p1++;
}
return-1;
}

7. 编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返回子串在主串中的位置。要求:

好 重新修改一下,
//===
#include <stdio.h>
#include <string.h>
//---
int cmpsubstr(char a[81],char b[81])
{
int i,j,flag=-1;
for(i=0;i<=(strlen(a)-strlen(b));i++)
{
flag=i;
for(j=0;j<strlen(b);j++)
if(b[j]!=a[i+j])
break;
if(j==strlen(b))
return flag;
}
return -1;
}
//---
void main()
{
char a[81],b[81];
int n;
printf("输入字符串a:");
gets(a);
printf("输入字符串b:");
gets(b);
if(strlen(a)>=strlen(b))
{
n=cmpsubstr(a,b);
if(n!=-1)
printf("b是a的子串,位置从a[%d]开始",n);
else
printf("b不是a的子串");
}
else
{
n=cmpsubstr(b,a);
if(n!=-1)
printf("a是b的子串,位置从b[%d]开始",n);
else
printf("a不是b的子串");
}
}
//===

8. C语言 求注释

for(i=0;a[i];i++)//因为数值是以\0结尾的,数值,就是等于0啦。所以当a[i]不等于0的时候循环
{
j=i;
for(k=0;a[j]==b[k]&&b[k]&&a[j];j++,k++);
//从头开始往后看,一个个字符比较,若符合条件,什么都不做直接分号;
这个条件就是 b[k]&&a[j]表示两个数组都没到结尾,a[j]==b[k],表示这两个字符相同。一旦有一个条件不符合,就跳出循环。若不满足条件跳出循环时,b肯定没到结尾。所以有下一句判断
if(!b[k])//这里,判断b是否到了结尾,如果b[k]==0,就说明b已经验证到尾了,也就是字串。
return ++i;
}
你还是不懂的地方,直接问吧,我说的也不一定是你不懂的。

9. C语言中判断一个字符串是否为另一字符串的子串

你的if语句后面再加个if语句判断f是否等于1,等于1就不用循环了。你没判断,后面的字符又把你的1改回0了。修改后代码如下

#include<stdio.h>
#include<string.h>
main(){
chara[100],b[100];
inti,j,f=0;
gets(a);//cde
gets(b);//aabbcdefghbcd
for(i=0;i<strlen(b);i++){
if(b[i]==a[0]){
for(j=1;j<strlen(a);j++){
if(a[j]==b[i+j]){
f=1;
continue;
}else{
f=0;
break;
}
}
}
if(f==1){
break;
}
}
if(f==1)
printf("YES");
else
printf("NO");
}

使用库函数strstr

#include<stdio.h>
#include<string.h>
main(){
chara[100],b[100];
gets(a);
gets(b);
if(strstr(b,a)!=NULL){//第2个参数第1个参数的子串
printf("YES");
}else{
printf("NO");
}
}

10. C语言中如何判断给定的两个字符串是否互为子串

int strstr(char *s1,char *s2)
{
int i,flag=0;
if(strlen(s1)>=strlen(s2))
{
for(i=0;i<strlen(s2);i++)
if(s1[i]!=s2[i])
flag=1;
if(flag==1) return 0;
else
return 1;
}
return 0;
}

strstr(s1,s2)等于1的时候说明s2是s1的字串.