从字符串中删除字符

时间:2013-11-18 15:32:01

标签: c string

我正在尝试创建function removes指定的character from a string

我只使用代码完成了一半,因为当我试图替换要删除的字符时,我遇到了困难。我刚刚意识到我不能在数组的元素中加入“无”,所以我的计划就被破坏了。

我认为我必须遍历整个字符串,当我找到要删除的字符时,我必须通过将“坏”字符前面的所有元素向前移动一步来删除它。这是对的吗?

#include <stdio.h>
#include <string.h>

void del(char string[], char charToDel)
{

    int index = 0;

    while(string[index] != '\0')
    {
        if(string[index] == charToDel){
            string[index] = string[index+1];
        }

        index++;
    }

    printf("%s", string);
}

int main(void)
{

    char string[] = "Hello world";

    del(string, 'l');

    return 0;
}

我想制作这个节目without pointers。只是简单的简单代码。

我添加了另一个while循环,它将循环中的每个字符向左移动,但由于输出只是纯空白,所以它似乎不起作用。

int index = 0;


    while(string[index] != '\0')
       {
           if(string[index] == charToDel)
           {
                while(string[index] != '\0')
                {
                    string[index] = string[index+1];
                }

           }

           index++;
       }

    printf("%s", string);
}

Johathan Leffler的方法?

        char newString[100];

    int index = 0;
    int i = 0;

    while(string[index] != '\0')
       {
           if(string[index] != charToDel)
           {
                newString[i] = string[index];

                index++;
                i++;

           }
           i++;
           index++;
       }

    printf("%s", newString);
}

这给了我很多奇怪的角色......

2 个答案:

答案 0 :(得分:4)

char const *in = string;
char *out = string;

while (*in) {
    if (*in != charToDel)
        *out++ = *in;
    ++in;
}

*out = '\0';

或没有指针

size_t in = 0;
size_t out = 0;

while (string[in]) {
    if (string[in] != charToDel)
         string[out++] = string[in];
    ++in;
}

string[out] = '\0';

答案 1 :(得分:0)

问题在于,当您将string[index+1]分配给string[index]时,字符串中的下一个l取代了前一个index1增加到下一个值l void del(char string[], char charToDel) { int index = 0, i = 0; while(string[index] != '\0') { if(string[index] != charToDel){ string[i++] = string[index]; } index++; } string[i] = '\0'; printf("%s", string); } ,您的函数不会删除此{{1}}。你应该修理那个。
正如Jonathan LefflerGabson所建议的那样;你可以通过将字符串复制到自身来做到;

{{1}}