нужна помощь в написании функции str to array

Sobbaka6
Offline
Зарегистрирован: 07.09.2019

Есть задача - разбить строку на элементы по разделителю и поместить эти самые элементы в массив 
То что имеется сейчас:

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:
}

 

negavoid
Offline
Зарегистрирован: 09.07.2016
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 split = "hi this is a split test";
String word3 = getValue(split, ' ', 2);
Serial.println(word3);  // is

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У String есть возможность добраться до её массива символов (метод c_str). Вот доберитесь, а с массивом символов и писать ничего не надо - там есть встроенная функция strtok специально для этого сделанная.