Преобразовать строку в массив

У меня есть проект, и мне нужно преобразовать строку (содержащую цифры и буквы) в массив

String name = "s111, s222, bbbb,cccc ";

и я хочу

array[0] = s111;
array[1] = s222;
array[2] = bbbb;
array[3] = cccc;

вот код:

 String name = "s111, s222, bbbb,cccc ";
 int array[50];
 int r=0,t=0;

 for(int i=0;i<name.length();i++){
      if(name.charAt(i) == ','){
          array[t] = name.substring(r,i);
          r = (i+1);
          t++;
         }
 for(int k=0 ;k<=t ;k++){
   Serial.println(array[k]);
  }

Когда я компилирую, я получаю только нули, например:

array[0] = 0;
array[1] = 0;
array[2] = 0;
array[3] = 0;

, 👍0

Обсуждение

Что именно не работает? Чего вы ожидали и что произошло на самом деле? Пожалуйста, предоставьте полный компилируемый код (в нем нет объявления других переменных, включая массив). Также может быть полезен мой ответ на этот вопрос., @chrisl

почему вы просите нас угадать, что на самом деле делает ваш код? ... мы даже не можем протестировать ваш код, потому что вы предоставили код, который не компилируется ... ваше описание проблемы "не работает", это бесполезно, @jsotola

думаю описание понятно, @yo777

Насчет «я хочу array[0] = s111;»: это не имеет смысла. «array» — это массив «int», а «s111» не является «int»., @Edgar Bonet

спасибо, но у вас есть другой способ разделить символ этой переменной, @yo777

Вам нужен массив строк или массив целых чисел? Если int, как следует интерпретировать последние 2 части? Шестнадцатеричный код ASCII?, @chrisl

массив строк, @yo777

«Я думаю, что описание понятно». Ты неправ. Ваш вопрос - мутная каша. Вы предоставили нам недостаточно кода для тестирования вашей программы. Вы не сказали нам, что не так с вашим текущим кодом. Вы не сказали нам, в каком формате должен быть ваш вывод (вы, наконец, сказали «массив строк» в комментариях, но вам нужно отредактировать свой вопрос, чтобы предоставить полное описание проблемы в самом вопросе. Не делайте этого). Не ждите, что кто-то попытается помочь вам прочитать бесконечную сессию вопросов и ответов, чтобы понять, что вы на самом деле спрашиваете., @Duncan C


1 ответ


Лучший ответ:

0

Когда вы объявляете int array[50];, вы объявляете массив чисел, поэтому внутри него могут храниться только числа. Если вам действительно нужен массив строк, объявите массив строк, например String array[50];. Также была проблема, заключавшаяся в том, что иногда вы разделяли name запятой, иногда пробелом, а иногда и запятой+пробелом. Также в вашем коде отсутствовала закрывающая скобка.

Алгоритм должен разделить как запятую, так и пробел, а затем принять только значения, длина которых больше единицы, чтобы избежать вставки пустых строк.

String name = "s111, s222, bbbb,cccc ";
String array[50];
int r=0,t=0;
  
for(int i=0;i<name.length();i++)
{
  if(name[i] == ' ' || name[i] == ',')
  {
    if (i-r > 1)
    {
      array[t] = name.substring(r,i);
      t++;
    }
    r = (i+1);
  }
}

for(int k=0 ;k<=t ;k++)
{
  Serial.println(array[k]);
}
,

спасибо, это работает, @yo777