欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Linux系统下的C语言练习:判断一个字符串是不是另一个字符串的子串,比如"ab"是"aabcd"的子串

程序员文章站 2022-07-28 22:10:03
Linux系统下的C语言练习:判断一个字符串是不是另一个字符串的子串,比如"ab"是"aabcd"的子串 #include #inc...

Linux系统下的C语言练习:判断一个字符串是不是另一个字符串的子串,比如"ab"是"aabcd"的子串

#include
#include
#include

int com(char *p, char *q, int n, int m)
{
	int i, j;
	char *tmp = (char *)malloc(sizeof(char) * 20);
	if(NULL == tmp)
	{
		printf("error\n");
		exit(1);
	}
	char *tmp1 = tmp;
	char *tmp2 = q;
	char *tmp3 = p;
	int flag = 0;
	if(n < m)
	{
		for(i = 0; i <= m - n; ++i )
		{
			q = q + i;
			for(j = i; j< i + n; ++j)
			{
				
				*tmp++ = *q++;
			}
			tmp = tmp1;
			if(strcmp(tmp, p) == 0)
			{
				flag = 1;
			}
			q = tmp2;
		}	

	}
    if(n > m)
	{
		for(i = 0; i <= n - m; ++i )
		{
			p = p + i;
			for(j = i; j< i + m; ++j)
			{
				
				*tmp++ = *p++;
			}
			tmp = tmp1;
			if(strcmp(tmp,q) == 0)
			{
				flag = 2;
			}
			p = tmp3;
		}	

	}
	if(n == m)
	{
		if(strcmp(p, q) == 0)
		{
			flag = 3;
		}
	}
	return flag;
}

int main()
{
	int l, l1;
	char *p = (char *)malloc(sizeof(char) * 20);
	char *q = (char *)malloc(sizeof(char) * 20);
	int flag;
	if(NULL == p || NULL == q)
	{
		printf("NULL error\n");
		exit(1);
	}
	printf("请输入第一个字符串\n");
	scanf("%s", p);
	printf("请输入第二个字符串\n");
	scanf("%s", q);
	l = strlen(p);
	l1 = strlen(q); 
	flag = com(p, q, l, l1);
	switch(flag)
	{
		case 0: printf("两字符串互不为对方的子串\n");
				break;
		case 1: printf("第一个字符串为第二个的子串\n");
				break;
		case 2: printf("第二个字符串为第一个的子串\n");
				break;
		case 3: printf("互为子串\n");
				break;
		default: printf("111\n");
				break;
	}
	return 0;
}