C 字符串中删除指定字符

题目如图:
20140517204316.jpg

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

#include<stdio.h>
#include<string.h>
void delchar(char s[], char c);
int main(void)
{
    char c;
    char s[80];
    printf("Input a string: ");
    gets(s);
    printf("Input a char: ");
    scanf("%c", &c);
    delchar(s, c);
    printf("After deleted,the string is:%s", s);
    return 0;
}

void delchar(char s[], char c)
{
    int i, j, len;
    len = strlen(s);
    for(i = 0; i < len; i++) {

        if(s[i] == c) {
            for(j = i; j < len; j++)
                s[j] = s[j + 1];

            i = i - 1;
        }
    }

}

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

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

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 条评论

  1. 喂,你的水平不应该写出小舟水平的代码啊。

    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. 缩进不能忍。

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

添加新评论