📄 字符串子串 267.cpp
字号:
#include "stdio.h"
#include "string.h"
int main()
{
printf("\n\t\t输入两个字符串,判断是否子串\n");
printf("─────────────────────────────────\n");
while(1)
{
char a[50],b[50]; int i,j,flag=-1;
size_t na,nb;
printf(" 输入第一个字符串: "); gets(a); //入一串存入a组,不用scanf("%s",a);
printf(" 输入第二个字符串: "); gets(b); //入一串存入b组,不用scanf("%s",b);
na=strlen(a); //获a串长
nb=strlen(b); //获b串长
if(na>=nb) //如a串长>b串长
{
for(i=0;na-i>=nb;i++) //a串剩余字符数<b串长度时,退出循环
{
flag=0;
for(j=0;j<nb;j++) //比较b串与a串中第i个字符开始的串
{
if(a[i+j]!=b[j]){flag=-1;break;} //当前字符不同,置标记-1,退出循环
}
if(flag==0){flag=i+1;break;} //如标记未修改,已找到子串,置标记flag为子串在源串中的起始位置,退出循环
}
if(flag==-1){printf(" 串2“%s”不是串1“%s”的子串.\n",b,a);}
else {printf(" 串2“%s”是串1“%s”的子串,起始位置为: %d\n",b,a,flag);}
}
else if(na<nb) //如a串长<b串长
{
for(int i=0;nb-i>=na;i++) //b串剩余字符数<a串长度时,退出循环
{
flag=0;
for(int j=0;j<na;j++) //比较a串与b串中第i个字符开始的串
{
if(b[i+j]!=a[j]){flag=-1;break;} //当前字符不同,置标记-1,退出循环
}
if(flag==0){flag=i+1;break;} //同上
}
if(flag==-1){printf(" 串1“%s”不是串2“%s”的子串.\n",a,b);}
else /*if(flag==0)不要此条件*/ {printf(" 串1“%s”是串2“%s”的子串,起始位置为: %d\n",a,b,flag);}
}
printf("\n 是否继续输入吗?是则回车,否则输入‘空格’回车 ");
if(getchar()==' '){break;}
else {while(getchar()!='\n'){;}}
}
return 0; //?
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -