题目
习题8-6 删除字符 (20 分)
本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
void delchar( char *str, char c );
其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。
输入样例:
a
happy new year
输出样例:
hppy new yer
代码
这个题需要考虑很多情况
1.有空格,有删除
2.删除字符在首尾,长度超过20
3.删除后字符串为空
4.被删除的字符不存在
5.字符串为空
//正确答案:
#include<string.h>
#include <stdio.h>
#define MAXN 20void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */void delchar( char *str, char c ){char str2[MAXN];int m =strlen(str);int i,j=0;for(i=0;i<=m;++i){if(str[i]=='\0'){str2[j]='\0';}if(str[i]==c){continue;}str2[j]=str[i];j++;}for(int i=0;i<=m;i++){str[i]=str2[i];}
}
int main()
{char str[MAXN], c;scanf("%c\n", &c);ReadString(str);delchar(str, c);printf("%s\n", str);return 0;
}
但是简单的后面移到前面的想法得到的答案是错的:
情况 | 答案 |
---|---|
sample等价,有空格,有删除 | 答案错误 |
删除字符在首尾,长度超过20 | 答案正确 |
删除后字符串为空 | 答案错误 |
被删除的字符不存在 | 答案正确 |
字符串为空 | 答案正确 |
//错误答案
#include<string.h>
void delchar( char *str, char c ){int m=strlen(str);for(int i=0;i<m;++i){if(str[i]==c){for(int j=i;j<m;++j){str[j]=str[j+1];} }}
}
以下这种也是错的:
情况 | 答案 |
---|---|
sample等价,有空格,有删除 | 答案正确 |
删除字符在首尾,长度超过20 | 答案错误 |
删除后字符串为空 | 答案正确 |
被删除的字符不存在 | 答案错误 |
字符串为空 | 答案正确 |
void delchar( char *str, char c ){char str2[MAXN];int m =strlen(str);int i,j=0;for(i=0;i<m;++i){if(str[i]=='\0'){str2[j]=str[i];}else if(str[i]!=c){str2[j]=str[i];j++;}}strcpy(str,str2);
}