给定一个英文单词和一段英文句子,假设该单词和英文句子中只包含英文字母。编写一个程序,将英文句子中出现给定单词的前后加上一个空格后输出,以实现断词。要求若单词出现在句子的开头,则此单词之前不能添加空格;若单词出现在句子结尾,则此单词之后也不能添加空格;若单词在句子中连续出现,则单词与单词之间也只用一个空格断开。在句子中查找单词时大小写无关。
【输入形式】
先从控制台输入一英文单词(长度不超过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;
}