#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, '`'));
}