當前位置:首頁 » 編程語言 » 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的字串.