CodeSky 代码之空

随手记录自己的学习过程

C 字符串中删除指定字符

2014-05-17 20:47分类: C评论: 2

题目如图:

题目意思很明显了,我们的思路其实也挺简单的,换句话说,删掉一个然后重构数组,补上那个空,一个个字符推进一格就行了嘛,不用想得太复杂(简单的来说就是偷懒)。

1#include<stdio.h>
2#include<string.h>
3void delchar(char s[], char c);
4int main(void)
5{
6	char c;
7	char s[80];
8	printf("Input a string: ");
9	gets(s);
10	printf("Input a char: ");
11	scanf("%c", &c);
12	delchar(s, c);
13	printf("After deleted,the string is:%s", s);
14	return 0;
15}
16
17void delchar(char s[], char c)
18{
19	int i, j, len;
20	len = strlen(s);
21	for(i = 0; i < len; i++) {
22
23		if(s[i] == c) {
24			for(j = i; j < len; j++)
25				s[j] = s[j + 1];
26
27			i = i - 1;
28		}
29	}
30
31}
32

程序是同学问我了之后我改的,所以不必太在意和我的风格不符=。=

根据评论,我们改进代码(评论里师匠写的)

void delchar(char s[], char c)
{
    int len;
    char *p, *q;
    for (p = q = s; *p; ++p) {
        if (*p != c) {
            *(q++) = *p;
        }
    }
    *q = '\0';
}

评论 (2)

lujjjh2014年5月20日 12:02

缩进不能忍。 ``` void delchar(char s[], char c) { int len; char *p, *q; for (p = q = s; *p; ++p) { if (*p != c) { *(q++) = *p; } } *q = '\0'; } ```

lujjjh2014年5月20日 12:01

喂,你的水平不应该写出小舟水平的代码啊。 ``` void delchar(char s[], char c) { int len; char *p, *q; for (p = q = s; *p; ++p) { if (*p != c) { *(q++) = *p; } } *q = '\0'; } ```