Работа со строкой

Bugen
Offline
Зарегистрирован: 15.05.2016

если допустим есть строка abcde12345, то как выделить из этой строки только числа? 

Bugen
Offline
Зарегистрирован: 15.05.2016

чтобы на выходе получилось только 12345

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

Ну, это можно сделать 100500 способами разной эффективности и экзотичности. 

А как Вы пытались?

Bugen
Offline
Зарегистрирован: 15.05.2016
char one_char;
String g,d,e;
int a, c;
void setup()
{
  Serial.begin(9600);
  
}
void loop()
    
{
  
  if (Serial.available()>0)
  {
    
    one_char=Serial.read();
    g+=one_char;
   }
    {  
  d=g.substring(0,3);
  e=g.substring(4,9);
   Serial.println(d);  
   Serial.println(e);
     }
}
 
Я хотел разбить ОДНУ общую строку на две, если я задаю 123abc25dfg то мне надо чтобы брал только числа 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

2. А буквы совсем не нужны? Так выбрасывайте их сразу при чтении и не надо будет вообще ничего потом искать. Если буквы не нужны, то нафига Вы пишете:

one_char=Serial.read();
g+=one_char;

Пишите сразу

one_char=Serial.read();
if (isdigit(one_char)) g += one_char;

И всего делов. Ничего, кроме цифр туда не попадёт.

Bugen
Offline
Зарегистрирован: 15.05.2016

Мне буквы нужны как пауза между числами

megarak
Offline
Зарегистрирован: 03.05.2016
char one_char;
String g,d,e;
int a, c;
void setup()
{
  Serial.begin(9600);
  
}
void loop()
    
{
  
  if (Serial.available()>0)
  {
    
    one_char=Serial.read();
    g+=one_char;
   }
  for(int i=0; i<g.Lenght; i++)
  {
     if(g[i]=="1" || g[i]=="2" || g[i]=="3" || g[i]=="4" || g[i]=="5" || g[i]=="6" || g[i]=="7" || g[i]=="8" || g[i]=="9" || g[i]=="0")
     {
         d[i]=g[i];//цифры
     }
     else
         e[i]=g[i];//буквы
  }
   Serial.println(d);  
   Serial.println(e);
}

 

Если честно не знаю можно ли так работать со стрингами) Можно попробовать

 

Bugen
Offline
Зарегистрирован: 15.05.2016

со стрингами никак))

megarak
Offline
Зарегистрирован: 03.05.2016

Не получается?

Bugen
Offline
Зарегистрирован: 15.05.2016

нет

megarak
Offline
Зарегистрирован: 03.05.2016

#include <SPI.h>
#include <WString.h>

char one_char,stroka;
String g,d="",e="";
int a, c;
void setup()
{
  Serial.begin(9600);
   
}
void loop()
     
{
  if (Serial.available()>0)
  {
     
    one_char=Serial.read();
    g += one_char;
   }
  for(int i=0; i<g.length(); i++)
  {
     if(g.charAt(i)=='1' || g.charAt(i)=='2' || g.charAt(i)=='3') //тут все до нуля сравнить
     {
         d += g.charAt(i);//цифры
     }
     else
         e += g.charAt(i);//буквы
  }
   Serial.println(d); 
   Serial.println(e);
}

Вот так попробуй

megarak
Offline
Зарегистрирован: 03.05.2016

#include <SPI.h>
#include <WString.h>

char one_char,stroka;
String g,d="",e="";
int a, c;
void setup()
{
  Serial.begin(9600);
   
}
void loop()
     
{

  g = "123abc45dd";
  for(int i=0; i<g.length(); i++)
  {
     if(g.charAt(i)=='1' || g.charAt(i)=='2' || g.charAt(i)=='3') //тут все до нуля сравнить
     {
         d += g.charAt(i);//цифры
     }
     else
         e += g.charAt(i);//буквы
  }
   Serial.println(d); 
   Serial.println(e);
}

А еще лучше так)

Bugen
Offline
Зарегистрирован: 15.05.2016

Спасибо конечно, но все равно не то. Видите ли, когда я задаю любую строку на ком порте. Типа asdsdf213smsdf234. То просто хочу чтобы только числа выделял. Чтобы шло примерно так:

213

234

213

234

213

Ну типо того.

megarak
Offline
Зарегистрирован: 03.05.2016

#include <SPI.h>
#include <WString.h>

char one_char,stroka;
String g,d="",e="";
int a, c;
void setup()
{
  Serial.begin(9600);
   
}
void loop()
     
{
  int k = 0;
  if (Serial.available()>0)
  {
     
    one_char=Serial.read();
    g += one_char;
   }
  for(int i=0; i<g.length(); i++)
  {
     if(g.charAt(i)=='1' || g.charAt(i)=='2' || g.charAt(i)=='3') //тут все до нуля сравнить
     {        
         d += g.charAt(i);//цифры  
         k=1;       
     }
     else
     {
         e += g.charAt(i);//буквы
         k=2;
     }
     if(k==2 && d.length()>0)//После того как считали все цифры и начались буквы - выводим цифры на ком порт
     {            
         Serial.println(d); 
         d="";
     }
  }
d="";
e="";
}

Должно выводиться именно то, что ты хотел. Отпишись работает или нет

Bugen
Offline
Зарегистрирован: 15.05.2016

УРААА!!! Все заработало!!! Спасибо за помощь