как правильно использовать строку с двумя неизвестными знаками ?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Точнее нужно отлавливать строку вида:  WEBR#12#

так вот на месте 12 могут быть разные цифры. К примеру мне нужно реагировать примерно так:

  if (val.index(F("#XX#")) > -1)  что использовать для поиска строки с ХХ которые могут быть любые на том месте?

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

1. Методы класса String -
string.indexOf()
string.substring(from, to)

2. Регулярные выражения. Библа тут.

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

3. 100 раз | :))))

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Short Circuit пишет:

Точнее нужно отлавливать строку вида:  WEBR#12#

так вот на месте 12 могут быть разные цифры. К примеру мне нужно реагировать примерно так:

  if (val.index(F("#XX#")) > -1)  что использовать для поиска строки с ХХ которые могут быть любые на том месте?

 

Пока е нашел, что хочу.

Уточню вопрос - в ардуино есть возожность указать например **  где на месте звездочки может быть любой знак?

 чтобы для поиска WEBR#12#  можно было указать примерно  как if (val.index(F("WEBR#**#")) > -1)   ??

 

я могу конечно искать до ** и после **.. но в моем случае это не подходит, долго обьяснять почему.

есть подозрение, что в ардуино как то возможно так сделать.

b707
Offline
Зарегистрирован: 26.05.2017

Short Circuit пишет:

Пока е нашел, что хочу.

Уточню вопрос - в ардуино есть возожность указать например **  где на месте звездочки может быть любой знак?

"звездочки" и другие метасимволы - частный случай регулярных выражений, упоминавшихся выше.

А вообще, если такая строка в программе одна-две, то проще написать ее анализ самостоятельно, будет значительно экономнее в смысле расхода памяти и быстродействия. чем через бибилиотеки.

Вам всего-то надо найти строку до этих символов, потом пропустить два символа и найти нужную строку после них.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

Вам всего-то надо найти строку до этих символов, потом пропустить два символа и найти нужную строку после них.

Только не пропустить два символа, а проверить, что эти символы являются цифрами.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Short Circuit пишет:

Точнее нужно отлавливать строку вида:  WEBR#12#

Писал навскидку, не компилил, принцип, надеюсь, понятен:

String test = "BLABLAWEBR#123456#";

int findDigit(String& input)
{
  int result = -1;
  
  int idx = input.indexOf(F("WEBR#"));
  if(idx >-1)
  {
    input.remove(0,idx+5);
    String tmp;
    for(int i=0;i<input.length();i++)
    {
      if(input[i] == '#')
      {
        input.remove(0,i+1);
        break;
      }
      
      tmp += input[i];
    }
    
    if(tmp.length())
      result = tmp.toInt();
  }
  
}

void setup()
{
  Serial.begin(9600);
  
  int myDigit = findDigit(test);
  Serial.println(myDigit);
}

void loop()
{
}

Проверки на то, является ли символ после первой # цифрой - можно добавить, если надо.

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

Short Circuit пишет:

Уточню вопрос - в ардуино есть возожность указать например **  где на месте звездочки может быть любой знак?

есть подозрение, что в ардуино как то возможно так сделать.

Есть подозрение, что в посте #1 Вам не просто сказали как это делать, а даже дали ссылку на библиотеку, которая это делает.