求大佬帮帮孩子这到c语言程序题

给定一个英文单词和一段英文句子,假设该单词和英文句子中只包含英文字母。编写一个程序,将英文句子中出现给定单词的前后加上一个空格后输出,以实现断词。要求若单词出现在句子的开头,则此单词之前不能添加空格;若单词出现在句子结尾,则此单词之后也不能添加空格;若单词在句子中连续出现,则单词与单词之间也只用一个空格断开。在句子中查找单词时大小写无关。

【输入形式】

先从控制台输入一英文单词(长度不超过10),然后在下一行输入一条英文句子(长度不超过50)。

【输出形式】

输出断词后的英文句子。

【输入样例】

the
Theschooltheboythethe

【输出样例】

The school the boy the the

【样例说明】

给定的单词为the,在给定的英文句子中,该单词出现了四次。第一次出现在句子开头,只在该单词后添加了一个空格,之前不能添加空格。第二次出现时前后各添加了一个空格。第三次与第四次连续出现,在第三次和第四次单词出现之间只加了一个空格,并且第四次出现在句子结尾,在其后也没有添加空格。

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

#include <stdio.h>
#include <string.h>
#include <ctype.h>
//查找big串中所有smal串的位置,并把位置存放在pos中,nmb存放个数
void findstr(char*big ,char* smal,int pos[],int *nmb)
{
	int i,j,lenb,lens;
	lenb = strlen(big);
	lens = strlen(smal);
	*nmb = 0;
	if(lens > lenb)
		return;
	
	i = 0;
	while(i < lenb-lens+1)
	{
		for (j = 0; j < lens;j++)
		{
			if(tolower(big[i+j]) != tolower(smal[j]))
				break;
		}
		if (j == lens) //说明找到
		{
			pos[*nmb] = i;
			(*nmb)++;
			i += lens;
		}else
			i++;
	}
}


int main()
{
	int i,nmb,shift = 0,start = 0;
	char fat[50] = {0};
	char sun[10] = {0};
	int pos[50] = {0};
	char out[100] = {0};
	printf("请输入需要查找的单词:");
	gets(sun);
	printf("请输入句子:");
	gets(fat);
	findstr(fat,sun,pos,&nmb);
		

	for (i = 0; i < nmb; i++)
	{
		memcpy(out+shift,fat+start,pos[i]-start);
		shift += pos[i] - start;
		start = pos[i] + strlen(sun);
		if (pos[i] == 0)
		{
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
			shift += strlen(sun);
			out[shift] = ' ';
			shift+=1;
		}else if (pos[i] + strlen(sun) == strlen(fat)) //最后一个
		{
			//判断是否有相邻,前一个不是sun,则加空格
			if (pos[i] - pos[i-1] != strlen(sun))
			{
				out[shift] = ' ';
				shift += 1;
			}
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
		}else if (pos[i] - pos[i-1] == strlen(sun))  //与前一个相邻
		{
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
			shift += strlen(sun);
			out[shift] = ' ';
			shift += 1;
		}else
		{
			out[shift] = ' ';
			shift += 1;
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
			shift += strlen(sun);
			out[shift] = ' ';
			shift += 1;
		}
			
	}

	printf("结果:%s\n",out);

	return 0;
}

 

修改代码如下:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
//查找big串中所有smal串的位置,并把位置存放在pos中,nmb存放个数
void findstr(char*big ,char* smal,int pos[],int *nmb)
{
	int i,j,lenb,lens;
	lenb = strlen(big);
	lens = strlen(smal);
	*nmb = 0;
	if(lens > lenb)
		return;

	i = 0;
	while(i < lenb-lens+1)
	{
		for (j = 0; j < lens;j++)
		{
			if(tolower(big[i+j]) != tolower(smal[j]))
				break;
		}
		if (j == lens) //说明找到
		{
			pos[*nmb] = i;
			(*nmb)++;
			i += lens;
		}else
			i++;
	}
}

int main()
{
	int i,nmb,shift = 0,start = 0;
	char fat[50] = {0};
	char sun[10] = {0};
	int pos[50] = {0};
	char out[100] = {0};
	printf("请输入需要查找的单词:");
	gets(sun);
	printf("请输入句子:");
	gets(fat);
	findstr(fat,sun,pos,&nmb);

	for (i = 0; i < nmb; i++)
	{
		memcpy(out+shift,fat+start,pos[i]-start);
		shift += pos[i] - start;
		start = pos[i] + strlen(sun);
		if (pos[i] == 0)
		{
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
			shift += strlen(sun);
			out[shift] = ' ';
			shift+=1;
		}else if (pos[i] + strlen(sun) == strlen(fat)) //最后一个
		{
			//判断是否有相邻,前一个不是sun,则加空格
			if (pos[i] - pos[i-1] != strlen(sun))
			{
				out[shift] = ' ';
				shift += 1;
			}
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
		}else if (pos[i] - pos[i-1] == strlen(sun))  //与前一个相邻
		{
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
			shift += strlen(sun);
			out[shift] = ' ';
			shift += 1;
		}else
		{
			out[shift] = ' ';
			shift += 1;
			memcpy(out+shift,fat+pos[i],strlen(sun));
			//memcpy(out+shift,sun,strlen(sun));
			shift += strlen(sun);
			out[shift] = ' ';
			shift += 1;
		}

	}
	memcpy(out+shift,fat+pos[nmb-1]+strlen(sun),strlen(fat)-pos[nmb-1]-strlen(sun) );
	printf("结果:%s\n",out);
	return 0;
}