本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
void delchar( char *str, char c );
其中char *str
是传入的字符串,c
是待删除的字符。函数delchar
的功能是将字符串str
中出现的所有c
字符删除。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char str[MAXN], c;
scanf("%c\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", str);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
a
happy new year
输出样例:
hppy new yer
写题过程中卡了一下,然后我想看一下函数内的结果,下面是当时的程序
void delchar( char *str, char c )
{
int i,j,cnt,n;
i=j=cnt=n=0;
while(str[n]!='\0')
n++;
while(j<=i){
if(str[i]!=c){
str[j]=str[i];
printf("%c",str[j]);/*注意这是我立刻想看上一条语句的结果写的输出,
而在给出的代码段中已经有了输出了*/
}
if(str[i]=='\0')
return;
j++;
i++;
}
}
结果:竟然判定正确了
然后我感觉???
又在DEV.C++上运行了一下
是两次输出,
个人猜测原因可能是PTA的判定程序在得到结果与预定答案相同时就结束了程序,没有继续运行,
导致忽略了第二次输出。
以下是正确答案:
void delchar( char *str, char c )
{
int i,j,cnt,n;
i=j=cnt=n=0;
while(str[n]!='\0')
n++;//统计字符数
while(j<=i){
if(str[i]!=c){//删除字符
str[j]=str[i];
j++;
}
if(str[i]=='\0')//当字符串到最后一个,结束程序,否则会段错误。
return;
i++;
}
}