Как удалить кавычки в C

#c #string #strtok

Вопрос:

Как мы можем удалить кавычки, например, если у нас есть: "film" и мы хотим вернуть film
Мой код:

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

Это должно быть что-то в этом роде?

Комментарии:

1.Если вы получите совпадение, возвращаемое значение должно быть s1 1 , поэтому после второй strlen строки добавьте: s1; , чтобы указать мимо левой кавычки [которая теперь равна 0x00].

Ответ №1:

  • s1[0] = ''; не позволит strlen(s1) вернуть правильное значение.
  • Вы должны вернуться s1 1 вместо s1 того, чтобы пропустить первую кавычку (или пробел, в котором была кавычка).

Попробуйте это:

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

Если вы хотите, чтобы и то, и другое " было удалено из исходной строки, вы можете переместить содержимое памяти с помощью memmove() вместо перемещения указателя. (Не используйте strcpy() nor memcpy() , потому что копирование в перекрывающееся место назначения ими не поддерживается)

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

Комментарии:

1. Спасибо! И как вы проверяете в главном, если я хочу , например char* example = "film"; , чтобы это было без кавычек, и если я написал char* example = ""film""; , это будет ошибка

2. 1. Изменение строкового литерала запрещено. Вы должны подготовить изменяемый массив. 2. Вы должны использовать escape-последовательность для помещения кавычек в строковые литералы. Это должно быть: char example[] = ""film"";

3. Первый " — это стиль, например , если строка "film" будет возвращена "film , может быть, вы знаете, почему?

4. @Xavi Нет, он возвращается film . Причина, по которой я не удалил первый " , заключается в том, что я думал, что он не будет виден, потому что возвращаемый указатель смещен, чтобы указать следующий символ кавычки.

5. Есть ли способ это исправить? Потому что, когда я его использую, он возвращает «пленку

Ответ №2:

Функция удаления относительно проста. Просто имейте два указателя.

 #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("%sn", strdelch(str, '`'));
}
 

https://godbolt.org/z/M7n8EExoc