C语言删除句子中指定单词

      这个问题可以拆分为两个简单的小题---第一步,在句子中找出指定的单词并将其赋为空格(其它符号也可以),第二步,将两个单词间多余的空格删去然后输出。

      这样做虽然可以解决这个问题,不过遍历两次字符串,效率不是很高,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);
}


下面是示例:



猜你喜欢

转载自blog.csdn.net/Poppy991122/article/details/79991883
今日推荐