нужна помощь в написании функции str to array
- Войдите на сайт для отправки комментариев
Сб, 07/09/2019 - 15:32
Есть задача - разбить строку на элементы по разделителю и поместить эти самые элементы в массив
То что имеется сейчас:
uint32_t CountTokens(String str, char separator = ' ') {
uint32_t count = 0;
int pos = 0;
String l_str = str;
l_str.trim();
if (l_str.length() <= 0) return 0;
pos = l_str.indexOf(separator);
while (pos >= 0) {
count++;
pos = l_str.indexOf(separator, pos + 1);
}
return ++count;
}
//------------------------------------------------------------------------
String GetToken(String str, uint32_t index, char separator = ' ') {
uint32_t count = CountTokens(str, separator);
if (count <= 1 || index < 1 || index > count) return str;
uint32_t pos_start = 0;
uint32_t pos_end = str.length();
count = 0;
for (uint32_t i = 0; i < pos_end; i++) {
if (str.charAt(i) == separator) {
count++;
if (count == index) {
pos_end = i;
break;
} else {
pos_start = i + 1;
}
}
}
return str.substring(pos_start, pos_end);
}
//------------------------------------------------------------------------
void setup() {
// put your setup code here, to run once:
String myString = "I;am;little;array";
Serial.begin(9600);
Serial.print("String = ");
Serial.println(myString);
uint32_t ct = CountTokens(myString, ';');
Serial.print("Count = ");
Serial.println(ct, DEC);
for (uint32_t i = 1; i <= ct; i++) {
Serial.print("Token ");
Serial.print(i, DEC);
Serial.print(" = ");
Serial.println(GetToken(myString, i, ';'));
}
}
void loop() {
// put your main code here, to run repeatedly:
}
String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = {0, -1}; int maxIndex = data.length()-1; for( int i=0; i<=maxIndex && found<=index; i++ ){ if( data.charAt(i)==separator || i==maxIndex ){ found++; strIndex[0] = strIndex[1]+1; strIndex[1] = (i == maxIndex) ? i+1 : i; } } return found > index ? data.substring( strIndex[0], strIndex[1] ) : ""; }У String есть возможность добраться до её массива символов (метод c_str). Вот доберитесь, а с массивом символов и писать ничего не надо - там есть встроенная функция strtok специально для этого сделанная.