通过索引从c中的字符串中删除char

时间:2018-02-13 20:00:12

标签: c string

如何在不使用任何库的情况下从c中的字符串中删除某个字符 功能?我写的函数似乎有一个运行时错误,我无法弄清楚为什么。

void remove_char(char* s,int index)
{
    while(s[index+1] != 0)
       {
           s[index] = s[index + 1];
           index++;
       }
      s[index] = 0;
}

我还想知道是否有办法删除复杂度为1的字符?

2 个答案:

答案 0 :(得分:0)

如果没有看到你如何调用你的函数,就很难知道确切的失败模式。用char string[] = "this is a string";调用它,它运行正常。但正如评论所示,其他一些形式的输入字符串可能会导致问题。

我使用了以下实现,没有任何问题。它会删除所有出现的指定字符:

int RemoveCharFromString(char *orig, char c, char *newStr)
{
    if(!orig) return -1;
    if(!newStr) return -1;
    int i=0, j=0;

    while (*(orig+i) != '\0')
    {
        if (*(orig+i) != c)
        {
            *(newStr+j) = *(orig+i);
            j++;
            i++;
        }
        else i++;
    }
    *(newStr+j) = '\0';
    return 0;
}

或者,按照您的要求,这个删除指定索引处的字符:

int RemoveCharFromStringByIndex(char *orig, int index, char *newStr)
{
    if(!orig) return -1;
    if(!newStr) return -1;
    int i=0, j=0;

    while (*(orig+i) != '\0')
    {
        if (i != index)
        {
            *(newStr+j) = *(orig+i);
            j++;
            i++;
        }
        else i++;
    }
    *(newStr+j) = '\0';
    return 0;
}

注意,在此实现中,newStr由调用者创建,并且必须包含足以包含结果的空间。

您当然可以以任何方式调整这些。改进原型是将原型改为:

char * RemoveCharFromString(char *orig, char c);

或者

char * RemoveCharFromStringByIndex(char *orig, int index)

但如果您愿意,那将是您可以做的事情。

答案 1 :(得分:0)

我总是喜欢这样从字符串中删除特定字符:

NULL

如果目标指针不等于被跳过的字符,则仅递增目标指针。有时您会直接使用传递的参数src和dst看到这一点,但是当某些编译器使用单独的指针生成更高效的代码时会回来。 " const"只是允许您将常量字符串作为源传递,而不会产生编译器错误。