两个c语言指针问题求解

1.写一个函数int find( char *s1, char*s2), 函数find 的功能是查找串s1 中是否包含指定的词(s2 指向),如果存在则返回第1次出现的位置,否则返回-1。约定串中的词由1个或1个以上的空格符分隔。 2.定义函数void Merge(int a[], int n, int b[], intm), 参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main 函数对其测试。

代码如下,如有帮助,请采纳一下,谢谢。

#include <stdio.h>
#include <string>

int find(char* s1,char*s2)
{
	int len1 = strlen(s1);
	int len2 = strlen(s2);
	for (int i = 0; i < len1 - len2; i++)
	{
		bool b = true;
		for (int j = 0; j < len2;j++)
		{
			if(s1[i+j] != s2[j])
			{
				b = false;
				break;
			}
		}
		if (b)
		{
			return i;
		}
	}
	return -1;
}



void Merge(int a[], int n, int b[], int m)
{
	int* buf = new int[m+n];
	int i = 0; int j = 0;
	int index = 0;
	while (i < n || j < m)
	{
		if (i < n && j < m)
		{
			if (a[i] < b[j])
			{
				buf[index] = a[i];
				index++;
				i++;
			}else
			{
				buf[index] = b[j];
				index++;
				j++;
			}
		}else if (i == n && j < m)
		{
			buf[index] = b[j];
			index++;
			j++;
		}else
		{
			buf[index] = a[i];
			index++;
			i++;
		}
	}

	for (int t = 0; t < m+n; t++)
	{
		a[t] = buf[t];
	}
	delete[] buf;
	buf = 0;

}

int main()
{
	char* s1 = "abcd efgbc hijklbcmnbc ha";
	char* s2 = "bc";
	
	int index = find(s1,s2);
	printf("%s在%s中的索引:%d\n",s2,s1,index);

	int a[100] = {1,12,33,44,55,66,88};
	int b[4] = {2,45,99,100};

	printf("合并前a:");
	for (int i = 0; i <7; i++)
	{
		printf("%d ",a[i]);
	}

	printf("\n合并前b:");
	for (int i = 0; i <4; i++)
	{
		printf("%d ",b[i]);
	}
	printf("\n合并后a:");
	Merge(a,7,b,4);
	for (int i = 0; i <11; i++)
	{
		printf("%d ",a[i]);
	}

	getchar();
	getchar();
	return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632