这个问题可以拆分为两个简单的小题---第一步,在句子中找出指定的单词并将其赋为空格(其它符号也可以),第二步,将两个单词间多余的空格删去然后输出。
这样做虽然可以解决这个问题,不过遍历两次字符串,效率不是很高,Poppy也在思索新的算法中。
#include<stdio.h>
#include<stdlib.h>
#define M 100
int my_strlen(char a[]);
void Find(char *a,char *find,int k); //找到对应单词并替换为空格的函数
void KG(char a[]); //删除多余空格的函数
int main()
{
int i,j,k;
char a[M],find[M];
scanf("%[^\n]",a); //输入任意字符串
printf("请输入需要删去的词汇:");
scanf("%s",find);
k=my_strlen(find);
Find(a,find,k);
KG(a);
system("pause");
return 0;
}
void Find(char *a,char *find,int k)
{
int i,j,m=1;
char *p=find;
while(*a&&m) //直至a字符串中字符读取完毕或m=0时停止
{
if(*a==*p)
{
p++;
if(*p==NULL&&*(a+1)==' '||*(a+1)==NULL)
{
m=0;
for(i=0;i<k;i++)
{
*(a-i)=' ';
}
}
}
else
{
p=find;
}
a++;
}
}
int my_strlen(char a[])
{
int i,k=0;
for(i=0;a[i]!='\0';i++)
{
k++;
}
return k;
}
void KG(char a[])
{
int i,j=0;
char b[M];
for(i=0;a[i]!='\0';i++)
{
if(a[i]!=' ')
{
b[j]=a[i];
if(a[i+1]==' ')
{
b[j+1]=' ';
j+=2;
}
if(a[i+1]!=' ')
{
j++;
}
}
}
b[j]='\0';
printf("删去后的结果为:");
printf("%s\n",b);
}
下面是示例: