⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 字符串子串 函数 267.cpp

📁 我正在学习C编程
💻 CPP
字号:
#include "stdio.h"
#include "string.h"

int f(char a[],char b[],size_t *na,size_t *nb)  //定义函数f(),形参a[]、b[]、*na、*nb接受实参的地址值
{   
	int i,j,flag;
	for(i=0;*na-i>=*nb;i++) //a串剩余字符数<b串长度时,退出循环(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为子串在源串中的起始位置,退出循环
	}
	return flag; //返回子串在源串中的起始位置值或-1
}

void main()  //主函数
{
	printf("\n\t\t输入两个字符串,判断是否子串\n");
	printf("─────────────────────────────────\n");
	while(1)
	{
		char a[50],b[50];    int flag;
		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串长
		{
			flag=f(a,b,&na,&nb);  //调用函数f(),地址值传与形参,获子串在源串中的起始位置值或-1 赋予flag
			if (flag==-1){printf("  串2“%s”不是串1“%s”的子串.\n",b,a);}
			else /*if (flag==0)不要此条件*/{printf("  串2“%s”是串1“%s”的子串,起始位置为: %d\n",b,a,flag);}
		}
		else if(na<nb) //如a串长<b串长
			{
				flag=f(b,a,&nb,&na);  //调用函数f(),地址值传与形参,获子串在源串中的起始位置值或-1 赋予flag
				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'){;}}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -