Есть такая строка: Код (C++): char str[] = "PRIVET_#BEGtestik#END_GOODBY"; Из этой строки мне нужно ПОБАЙТНО обратится к содержимое между #BEG и #END В Сях я совсем не разбираюсь. Получилось, что такое и оно вроде как даже работает. Код (C++): void setup() { Serial.begin(115200); char str[] = "PRIVET_#BEGtestik#END_GOODBY"; char *ptr_beg; // Указатель на начало char *ptr_end; // Указатель на конец ptr_beg = strstr (str, "#BEG"); ptr_end = strstr (str, "#END"); if (ptr_beg == NULL) { Serial.println("не найдено начало"); return; } if (ptr_end == NULL) { Serial.println("не найден конец"); return; } ptr_beg+=4; for (ptr_beg; ptr_beg < ptr_end; ptr_beg++) { Serial.println(*ptr_beg); } } void loop() { } Так можно сделать или это криво совсем?
Про UTF я в курсе, если в массиве между #BEG.....#END будут русские буквы, там будет отдельный обработчик. В рамках данной задачи считаем, что использование кириллицы в строке не предполагаетЦО
Да и вообще с Кирилицей в Ардуине проблем нет - она там все за тебя делает ))) Код (C++): void setup() { Serial.begin(115200); char str[] = "PRIVET_#BEGtest_привет_мир!#END_GOODBY"; char *ptr_beg; // Указатель на начало char *ptr_end; // Указатель на конец ptr_beg = strstr (str, "#BEG"); ptr_end = strstr (str, "#END"); if (ptr_beg == NULL) { Serial.println("не найдено начало"); return; } if (ptr_end == NULL) { Serial.println("не найден конец"); return; } ptr_beg+=4; String S; for (ptr_beg; ptr_beg < ptr_end; ptr_beg++) { char s = *ptr_beg; S += s; } Serial.println(S); } void loop() { }
вообще, строка сдвигает указатель на 4 char элемента вправо и делает это жёстко. Если вместо будет Unicode с двумя байтами на символ, то будет сюрприз. Поэтому все длины я отдаю на откуп компилятору (или препроцессору) - им виднее, что там да как.
Вы сюда поспорить пришли? Или ответ получить? Может, вместо спора, продуктивнее спросить, а как это сделать с наименьшими усилиями? Получить ответ, что для исключения проблем, достаточно вместо Код (Text): ptr_beg += 4; написать Код (Text): ptr_beg += sizeof("#BEG") - 1; и получить новое знание? Или поспорить приятнее? Я вот хотел ещё несколько замечаний сделать, но что-то расхотелось. Бить пальцы об клавиши, чтобы Вы меня так же как паровоза послали и стали доказывать, что у Вас и так всё хорошо? Оно мне надо? У Вас всё хорошо, не возражаю.
За новое знание конечно спасибо, только в конечной программе планируется использование около 40 разных подобных идентификаторов (что-типа самодельного макроязыка) и мне проще их сделать стандартной длинны и уж точно без кириллицы.... Все что меня интересовало - как правильно сделать поиск в ЭТОЙ КОНКРЕТНОЙ СТРОКЕ? Не будет у меня в этой строке ничего кроме assi кодировки - так зачем мне знания к теме вопроса не относящиеся? Мне нужен был либо кусок кода, либо совет какой погуглить оператор или, а не как использовать символы, использование которых не предполагается.
Обо всём об этом мы узнали только сейчас, ибо вопрос был поставлен так (сразу после простыни с кодом): с точки зрения машины, символы в строке не делятся на извращённые и не извращённые. Я уже показывал, что если научится владеть инструментом, то работать можно с чем угодно. Сложность при работе с обычными ASCII кодировками только лишь одна - можно использовать только английский и ещё какой-то, но один, язык. Хочешь третий язык - придётся переключить ASCII таблицу. Хочешь смайлики - переключись ещё на одну.