Разделить символ после нахождения точки в с ++ - PullRequest
0 голосов
/ 28 февраля 2020

Я работаю с char в C ++. Я уже правильно установил char[], который ищу, но он содержит информацию, которая мне не нужна. ObjectName состоит из имени и свойства. Структура name.property, и я хотел бы получить только часть свойства (string после точки).

if (strcmp(objectName, "") != 0) {
        char fullName[32];
        char *mqttAddress;
        sprintf(fullName, "test/%s", objectName);
        mqttAddress = strtok(fullName, ".");

        sprintf(payload, "%s, %.5f,%.5f", mqttAddress, x, y);
        mqttPublishMessage(payload, mqttAddress );

    }

Как можно разделить string после точки и сохранить значение в mqttAddress или любая другая переменная? И пример будет:

objectName = "name.property"

Ожидаемый результат будет property

Я пытался использовать:

            mqttAddress = strtok(fullName, ".");

, но результат равен name

Другой подход - получить строку после position 8 из fullName или, возможно, использовать что-то вроде strtok после нахождения test.

1 Ответ

1 голос
/ 28 февраля 2020

Используйте std::string_view:

#include <cassert>
#include <iostream>
#include <string_view>

int main() {
  std::string_view const s = "name.property";
  auto pos = s.find('.');
  assert(pos != std::string_view::npos); // Do your error checking.
  ++pos;
  auto const property = s.substr(pos);
  std::cout << property;
}

Если вы просто хотите использовать библиотеку C:

#include <cassert>
#include <cstdio>
#include <cstring>

int main() {
  char const * const str = "name.property";
  char const * property = std::strchr(str, '.');
  assert(property); // Error handling
  ++property;
  std::puts(property);
}
...