помогите сделать цыкл

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

Помогите сделать цыкл, требуется 1000 значений

 

 
int variable1 = 0;

if (StrContains(HTTP_req, "var1=0a")) {
    variable1 = 0;
     } else if (StrContains(HTTP_req, "var1=1a")) {
      variable1 = 1;
    } else if (StrContains(HTTP_req, "var1=2a")) {
      variable1 = 2;
    } else if (StrContains(HTTP_req, "var1=3a")) {
      variable1 = 3;
    } else if (StrContains(HTTP_req, "var1=4a")) {
      variable1 = 4;
    } else if (StrContains(HTTP_req, "var1=5a")) {
      variable1 = 5;
    } else if (StrContains(HTTP_req, "var1=6a")) {
      variable1 = 6;
    } else if (StrContains(HTTP_req, "var1=7a")) {
      variable1 = 7;
    } else if (StrContains(HTTP_req, "var1=8a")) {
      variable1 = 8;
    } else if (StrContains(HTTP_req, "var1=9a")) {
      variable1 = 9;
    } else if (StrContains(HTTP_req, "var1=10a")) {
      variable1 = 10;
    } else if (StrContains(HTTP_req, "var1=11a")) {
      variable1 = 11;
    } else if (StrContains(HTTP_req, "var1=12a")) {
      variable1 = 12;
    }
 
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
int num = 0;
const char* str = strstr(HTTP_req.c_str(),"var1=");
if(str)
{
 String buff;
  str += 5;
  while(*str != 'a')
   {
      buff += *str++;
   }

  num = buff.toInt();
 
}

if(num > 0)
{
 // работаем с номером.
}

Навскидку написал, думаю, принцип понятен - ищем начало "var=", переходим за знак "=", и читаем символы во временную строку, пока не встретим символ "а". После этого - в буфере число: переводим его из строкового представления в числовое - вуаля, не надо 1000 раз в цикле проверять ;)

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

Anton_Kos87 пишет:

Помогите сделать цыкл, требуется 1000 значений

1. Внимательно читаем вот это и вот это.

2. Открываем любой редактор текста и набираем там фразу "Цыган присел на цыпочки, сказал цыплёнку цыц". Делаем это в цЫИкле - требуется 1000 значений. 

Проблему как рукой снимет.

Araris
Offline
Зарегистрирован: 09.11.2012

Евгений, простите, а зачем цЫкл в данной задачке ? Распарсить строку вида "var1=nnnna", вытащить всё между "=" и "а", преобразовать "nnnn" в целое число, присвоить переменной variable1 - DIYMan всё расписал. Или Вы чисто с воспитательными целями...

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

Araris пишет:

Евгений, простите, а зачем цЫкл в данной задачке ? Распарсить строку вида "var1=nnnna", вытащить всё между "=" и "а", преобразовать "nnnn" в целое число, присвоить переменной variable1 - DIYMan всё расписал. Или Вы чисто с воспитательными целями...

Я отвечал на вопрос как организовать цЫкл, безотносительно задачи. Прочитает по ссылкам, будет знать.

А на вопрос "зачем там этот цЫкл" нужен, я не заморачивался.

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

  int count;
  int variable2 = 0;
  int variable2_arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

    for (count = 0; count < 13; count++) {
      char varCount =  "StrContains(HTTP_req, \"var2=" + variable2_arr[count] + "a\")";// эта строка, привык к JS по этому так написал

    if (varCount) {
        variable2 = variable2_arr[count];
       }

    }

Цикл то готов, реально проблема с вытаскиванием значения, пока немогу понять по наброске DIYMan.

 

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

Anton_Kos87 пишет:



      char varCount =  "StrContains(HTTP_req, \"var2=" + variable2_arr[count] + "a\")";// эта строка, привык к JS по этому так написал

Ага, только здесь не JS. Я вот так к Лиспу привык, и тоже хочу на лиспе писать, только С++ сволочь почему-то не понимает.

Убирайте и пишите на том языке, на котором в данный момент программируете.

Anton_Kos87
Offline
Зарегистрирован: 07.03.2014

программисты поймут что я хотел этим выразить.

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

Anton_Kos87 пишет:

программисты поймут что я хотел этим выразить.

Программисты, может, и поймут, а вот компилятор - он тупой как валенок и ни хрена не понятливый :) 

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

DIYMan пишет:

int num = 0;
const char* str = strstr(HTTP_req.c_str(),"var1=");
if(str)
{
 String buff;
  str += 5;
  while(*str != 'a')
   {
      buff += *str++;
   }

  num = buff.toInt();
 
}

if(num > 0)
{
 // работаем с номером.
}

Навскидку написал, думаю, принцип понятен - ищем начало "var=", переходим за знак "=", и читаем символы во временную строку, пока не встретим символ "а". После этого - в буфере число: переводим его из строкового представления в числовое - вуаля, не надо 1000 раз в цикле проверять ;)

Строка 16 не проканает, ибо var1=0 вполне может быть. :)
Что будет в строке 6, если после var1= ничего не окажется?
Что будет в строке 7, если "а" так и не найдётся?

А кто такой HTTP_req? Где он живёт, подскажите, пожалуйста. Я то HTTP руками сделал, за одно так быстрее получилось: получив строку GET, а она как раз первой идёт в запросе, тут же флуш буфферу приёма, ибо там ненужного хлама много, раз в 5 больше, чем сам запрос, например, долгое персичление что может принимать экспрорер.

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

faeton пишет:

DIYMan пишет:

int num = 0;
const char* str = strstr(HTTP_req.c_str(),"var1=");
if(str)
{
 String buff;
  str += 5;
  while(*str != 'a')
   {
      buff += *str++;
   }

  num = buff.toInt();
 
}

if(num > 0)
{
 // работаем с номером.
}

Навскидку написал, думаю, принцип понятен - ищем начало "var=", переходим за знак "=", и читаем символы во временную строку, пока не встретим символ "а". После этого - в буфере число: переводим его из строкового представления в числовое - вуаля, не надо 1000 раз в цикле проверять ;)

Строка 16 не проканает, ибо var1=0 вполне может быть. :)
Что будет в строке 6, если после var1= ничего не окажется?
Что будет в строке 7, если "а" так и не найдётся?

А кто такой HTTP_req? Где он живёт, подскажите, пожалуйста. Я то HTTP руками сделал, за одно так быстрее получилось: получив строку GET, а она как раз первой идёт в запросе, тут же флуш буфферу приёма, ибо там ненужного хлама много, раз в 5 больше, чем сам запрос, например, долгое персичление что может принимать экспрорер.

Ну я ж говорю - писал навскидку. Там делов-то понимающему - инициализировать num в -1, да ещё одну проверку на конец строки вставить ;) Вы же не думаете, что моя задача - сделать всё за ТС? Принцип - показан, остальное - на совести реализатора.

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

DIYMan пишет:

Там делов-то понимающему - инициализировать num в -1, да ещё одну проверку на конец строки вставить ;) Вы же не думаете, что моя задача - сделать всё за ТС? Принцип - показан, остальное - на совести реализатора.

Дело в том, что Вы это пишете для НЕпонимающих. Осторожнее с новичками, они считают Вас богом и верят каждой букве. Поправить они пока не могут. Так что старайтесь тщательно писать примеры.

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Вот я согласен с Евгением. Или не давайте целый кусок кода, заманивая строкой "// работаем с номером". Хотя... Всё равно же им придётся учиться отлавливать чужие баги рано или поздно - пусть тренируются. :)

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

Да ладно, накинулись :) Скажите ещё, что вас в детстве плавать культурно учили :))) Меня вон выкинули из лодки - так и научился, ахахах. Иногда исповедую этот подход - ну а как иначе заставить человека начать думать, что он делает? Готовые куски кода - моветон, кмк.

Доиппаться можно и до столба, но раз хотите расово верного кода - вот он:

#define KNOW_VALUE_LOW  0 // нижнее значение диапазона, который может принимать переменная
#define KNOWN_VALUE_HIGH 1000 // верхнее значение диапазона, который может принимать переменная

int num = -1; // ах да - щас скажут, что могут быть и отрицательные числа в параметрах. Нунах.

// HTTP_req - экземпляр класса String, сам рулит буфером, добавляя \0 последним символом

static const String toFind = F("var1=");
const char* str = strstr(HTTP_req.c_str(),toFind.c_str());

if(str)
{
 String buff;
  str += toFind.length(); // раз нашли var1= - значит, как максимум, попадём на \0 в строке 
  while(*str && *str != 'a')
   {
      buff += *str++;
   }

  num = buff.toInt();
 
}

if(num >= KNOW_VALUE_LOW && num <= KNOWN_VALUE_HIGH)
{
 // работаем с номером.
}

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

З.Ы. Знаю, что не устроит :) По хорошему - надо вводить уровень абстракций.