字符串的删除(二)

上篇我们给出了删除字符串末尾的*,在这篇,我们给出删除字符串后面以及中间的*。本题我们采用指针来解决问题。

【问题】:

规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。

注意:部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

【程序】:

#include

void fun( char *a )

{

}

main()

{ char s[81];void NONO ();

printf("Enter a string:\n");gets(s);

fun( s );

printf("The string after deleted:\n");puts(s);

NONO();

}

void NONO ()

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

FILE *in, *out ;

int i ; char s[81] ;

in = fopen("in.dat","r") ;

out = fopen("out.dat","w") ;

for(i = 0 ; i

fscanf(in, "%s", s) ;

fun(s) ;

fprintf(out, "%s\n", s) ;

}

fclose(in) ;

fclose(out) ;

}

------------------------------

【参考答案】

void fun( char *a )

{

int i=0;

char *p=a;

while(*p&&*p=='*')

{

a[i]=*p;

i++;

p++;

}

while(*p)

{

if(*p!='*')

p++;

}

a[i]='\0';

}

【解析】:

要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。

(1) 定义一个临时指针p,初始指向原串首地址;(2) 利用循环语句把字符串前导*号拷贝到原串;(3) 继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符'\0'。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710G1RV6L00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券