如何在C中删除引号

How to remove quotation marks in C

我们如何删除引号,例如,如果我们有:"film" 并且我们想要 return film
我的代码:

char* remove_quotes(char* s1) {
    if (s1[0] == '"' && s1[strlen(s1) - 1] == '"') {
        s1[0] = '[=10=]';
        s1[strlen(s1) - 1] = '[=10=]';
    }
    return s1;
}

应该是这样的吧?

  • s1[0] = '[=12=]'; 将阻止 strlen(s1) return 获取正确的值。
  • 您应该 return s1 + 1 而不是 s1 以跳过第一个引号(或 space 那里有一个引号)。

试试这个:

char* remove_quotes(char* s1) {
    if (s1[0] == '"' && s1[strlen(s1) - 1] == '"') {
        s1[strlen(s1) - 1] = '[=10=]';
        return s1 + 1;
    }
    return s1;
}

如果你想把"都从原来的字符串中去掉,你可以通过memmove()移动内存的内容,而不是移动指针。 (不要使用 strcpy()memcpy(),因为它们不支持复制到重叠目标)

char* remove_quotes(char* s1) {
    size_t len = strlen(s1);
    if (s1[0] == '"' && s1[len - 1] == '"') {
        s1[len - 1] = '[=11=]';
        memmove(s1, s1 + 1, len - 1);
    }
    return s1;
}

移除功能比较简单。只要有两个指针。

#include <stdio.h>

char *strdelch(char *str, char ch)
{
    char *current = str;
    char *tail = str;

    while(*tail)
    {
        if(*tail == ch)
        {
            tail++;
        }
        else
        {
            *current++ = *tail++;
        }
    }
    *current = 0;
    return str;
}

int main(void)
{
    char str[] = "Hell`o` ```w`o``r`l```d`!```";

    printf("%s\n", strdelch(str, '`'));
}

https://godbolt.org/z/M7n8EExoc