Как преобразовать эту длинную строку?

У меня есть строка

"id,порт,пароль,ssid,задержка,флаг,класс,категория"

Подскажите, пожалуйста, как это сделать с помощью stringtok и узнать значение "флага" (0 или 1)?

Вот что я пробовал:

void setup()
{
    char input[] = {"id,port,password,ssid,delay,flag,class,category"};
    char *ptr;
    Serial.begin(115200);
    ptr = strtok(input, ",");
    Serial.println(ptr);
    while (ptr != NULL) {
        ptr = strtok(NULL, ",");
        Serial.println(ptr);
    }
}

void loop(){}

, 👍1

Обсуждение

Я бы удалил { и } в char input[] = {"id,port,password,ssid,delay,flag"};, @Juraj

Даже с (бесполезными) фигурными скобками, которые Джурай предлагает удалить, ваш код работает так, как ожидалось. Пожалуйста, уточните, в чем именно заключается ваша проблема., @Edgar Bonet

как отдельно взята подстрока «флаг»? какую модификацию я хочу сделать в программе?, @Jonson

исходя из должности? 6-й пункт?, @Juraj


1 ответ


2

Для строк с таким фиксированным форматом (я предполагаю, что это фиксированный формат...) я обычно просто вручную делаю strtok всего этого в набор указателей. Нет необходимости в петле. Затем вы можете просто протестировать последний, чтобы увидеть, правильно ли все это токенизировано, поскольку, если что-то до этого выйдет из строя, все остальные последующие потерпят неудачу, а последний не будет выполнен.

void setup()
{
    char input[] = {"id,port,password,ssid,delay,flag,class,category"};
    char *ptr;
    Serial.begin(115200);

    char *id = strtok(input, ",");
    char *port = strtok(NULL, ",");
    char *password = strtok(NULL, ",");
    char *ssid = strtok(NULL, ",");
    char *delay = strtok(NULL, ",");
    char *flag = strtok(NULL, ",");
    char *class = strtok(NULL, ",");
    char *category = strtok(NULL, ",");
    if (category != NULL) { // Сработало все до категории включительно
        Serial.print("Flag: ");
        Serial.println(flag);
    }
}

void loop(){}

Кроме того, если есть шанс, что какое-либо из полей может быть пустым (например, флаг, категория), вам следует использовать strsep() вместо strtok (), как я подробно описал в своем руководстве по разбиению строк в C.

,