как с помощью класса String разбить строку на 3 строки
- Войдите на сайт для отправки комментариев
Пт, 10/05/2013 - 17:20
Всем привет!
Допустим имеется строка: "115 200 120"
как ее разбить на
a=115
b=200
c=120
можно конечно с помощью СабСтринг, вот так:
a=строка.substring(0,3);
b=строка.substring(3,7);
c=строка.substring(7,11);
но если у нас будет другая строка: 10 0 125, то получится херня...
преобразуй в char[] и разбей
#include <string.h> String Str="10 0 125"; char buffer[11]; int s1, s2, s3; void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Str.toCharArray(buffer,11); s1=atoi(strtok(buffer," ")); s2=atoi(strtok(NULL," ")); s3=atoi(strtok(NULL," ")); Serial.println(s1); Serial.println(s2); Serial.println(s3); delay(5000); }Хороший способ. У меня между значениями много пробелов и поэтому выводит только первое значение, остальные не выводит. Не подскажете как можно решить проблему?
Я задал вопрос тут, можете ответить и получить бал )
https://ru.stackoverflow.com/questions/770348/arduino-%D0%B8%D0%B7%D0%B2...
Если именно стринг то можно так
trim
IndexOf
remove
И далее в цикле пока есть что парсить.
А если без херни лоховской то
byte i=0; byte j=0; for(;buffer[i];) { if(buffer[i]==' ') { if(i>j) { buffer[i]=0; Serial.println(buffer+j); buffer[i]=' '; } j=i+1; } i++; } Serial.println(buffer+j);Разбивает по пробелам хоть сто штук, одним проходом без копирования и буферирования. Если надо числа - вместо вывода в сириал надо atoi как выше было писано
У меня не получается разобрать строку, remove удаляю пробелы, а данные только заносятся в s1
void loop() { void loop() { // put your main code here, to run repeatedly: while (Serial1.available()) { delay(3); //delay to allow buffer to fill if (Serial1.available() > 0) { c = Serial1.read(); //gets one byte from serial buffer readString += c; //makes the string readString } } readString.getBytes(buffer, 100); s1 = atoi(strtok(buffer, " ")); s2 = atoi(strtok(NULL, " ")); s3 = atoi(strtok(NULL, " ")); Serial.print(s1); Serial.print(" "); Serial.print(s2); Serial.print(" "); Serial.print(s3); Serial.println(); readString = ""; }Проблему решил с помощью remove(). Мне нужно было первое и третье показание оси "x" и "z", ось "y" не настраивал.
char c; String x, y, z; String readString; String readString2; String readString3; void setup() { Serial1.begin(9600); Serial.begin(9600); } void loop() { while (Serial1.available()) { delay(3); //delay to allow buffer to fill if (Serial1.available() > 0) { c = Serial1.read(); //gets one byte from serial buffer readString += c; //makes the string readString readString2 += c; //makes the string readString readString3 += c; //makes the string readString } } Serial.println(readString); readString.remove(3); x = readString; Serial.print("x= "); Serial.println(x); /* readString2.remove(0,7); y = readString2; Serial.print("y= "); Serial.println(y);*/ readString3.remove(0,13); z = readString3; Serial.print("z= "); Serial.println(z); delay(400); readString = ""; readString2 = ""; readString3 = ""; }