Разбор строки, основанный на escape-символе

0

Я пытаюсь проанализировать следующую строку:

"USBSTOR\DISK&VEN_JETFLASH&PROD_TRANSCEND_8GB&REV_1100\00H8096XQ9UW1BQ5&0:JetFlash Transcend 8GB USB Device"

на основе '\' (символа)

Проб. 1: но этот символ считается escape-символом

Пример 2: \0 в середине строки рассматривается как конец строки.

Я пробовал так много способов.

(i) Я попытался заменить '\' другим символом типа '$' и попытался разобрать с помощью sscanf() но это не сработало.

Можете ли вы что-нибудь предложить?

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

int main()
{
    char str[80] = "This is \www.tutorialspoint.com \website";
    const char s[2] = "\\";
    char *token;

    /* get the first token */
    token = strtok(str, s);

    /* walk through other tokens */
    while( token != NULL )
    {
      printf( " %s\n", token );

      token = strtok(NULL, s);
    }

    return(0);
}
Теги:
parsing

2 ответа

1

Помните Escape Sequences (\\, \n, \0 и т.д.) - это один символ.

Чтобы иметь символ \ в строке, инициализированной в самом коде, обязательно необходимо использовать \\ в строке инициализации.

Если вы предоставляете ввод во время выполнения, то вы должны использовать \ (Single BackSlash) для ввода. Предоставление ввода таким образом не будет рассматривать символ \0 как символ ASCII-0, вместо этого он будет обрабатываться как \ после которого следует 0 (два символа).

В вашем случае вы хотите разобрать "USBSTOR\D...", вы можете сделать это либо путем сохранения его в строке const (помните \\ в этом случае), либо предоставив его как консоль входных форм или файл на диске (Здесь вы должны использовать single \).

В любом из вышеперечисленных способов, когда вы читаете строку, вы получите правильный символ, ожидаемый, например, для первого случая \\ разрешит \ при его чтении или распечатке.

  • 0
    : Но когда он получит \ 0, он будет думать о конце строки ...
  • 0
    Нет, не будет! Каждый из них является отдельным персонажем. «\ 0» - это один символ «blah \ 0blah» содержит 10 символов.
Показать ещё 1 комментарий
1

Сделайте эту модификацию char str[80] = "This is \\www.tutorialspoint.com \\website";

При этом ваш результат:

This is 
www.tutorialspoint.com 
website

Помните: любой строковый литерал, который вы используете в коде, требует escape-последовательности для обратной косой черты.

  • 0
    : Как изменить ..
  • 0
    Это только для строкового литерала (т. Е. Константная строка, которую вы используете справа). Вам нужно использовать \\ вместо \.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню