Работа со строками

RZ3AMJ
Offline
Зарегистрирован: 13.09.2015

Прошу помощи у знающих людей, для которых эта задача как "два пальца об асфальт" :)

Есть текстовая строка вида: 12#567#456#7#

Т.е. значения разделенные между собой символом #, значения могут быть как и текстовые так и числовые, и длина их тоже может быть разная. Как разбить эту строку на разные значения, чтобы получилось например в итоге что Т1=12,Т2=567,Т3=456 и Т4=7?

Как я это вижу:

1. Найти позицию символа # с помощью indexOf()
2. с помощью toCharArray() скопировать символы ДО данной позиции в буфер и запомнить в переменную Т1
3. с помощью substring() отбросить скопированные символы и запомнить строку без них
4. снова найти позицию символа # с помощью indexOf()\
5. Также с помощью toCharArray() скопировать символы ДО данной позиции в буфер и запомнить в переменную Т2
ну и так далее, т.е. каждый раз копируем всё до символа #, запоминаем это, отбрасываем и начинаем заново.
Я в операциях со строками очень туго разбираюсь, так что наверняка можно всё это сделать проще, вот и прошу совета как это сделать?
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, Вы сделайте как умеете, а там обсудим.

Если же совсем по уму хотите, то забудьте про класс String, а работайте с нормальным массивом символом. Для Вашей задачи погуглите примеры использования функции strtok

RZ3AMJ
Offline
Зарегистрирован: 13.09.2015

В общем так и не смог победить strtok. В итоге сделал по аналогии как тут

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну и зря.

Через часик другой попаду домой, попробую помочь вам.

RZ3AMJ
Offline
Зарегистрирован: 13.09.2015

Ну если не в тягость помочь, буду признателен. Я пытался разобраться по примеру из этой темы, но у меня проблема как у ТС, постоянно выдается первое значение, да к тому же еще и всё криво как-то. Вот пример:

#include <string.h>

char buf [] = "11#12#13#14#";
char * istr;

void setup() {
  Serial.begin(115200);
  // put your setup code here, to run once:

}

void loop() {

  for (istr = strtok (buf,"#"); istr!=NULL; istr=strtok(NULL,","))
  {
    Serial.println(istr);
  }
  delay(5000);
}

Вот что сыпется в сериал:

11
12#13#14#
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я думаю этот пример можно взять за основу

RZ3AMJ
Offline
Зарегистрирован: 13.09.2015

Спасибо за ссылку. Ранее у меня почему-то это пример не работал, а сейчас заработал. Всем спасибо. Буду пробовать адаптировать его под свои нужды.

RZ3AMJ
Offline
Зарегистрирован: 13.09.2015

to ua6em 73! 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

RZ3AMJ пишет:

to ua6em 73! 

73! Gl! & vy DX!