Скачать MetaTrader 5

Распознать тест от цифр

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Roman Usenkov
443
Roman Usenkov  
Добрый день, вывожу объект OBJ_Edit и мне нужно распознать что в нем цифра либо же какое-то слово или набор букв, как это реализовать?
Sergei Vladimirov
8837
Sergei Vladimirov  

Готовой встроенной функции для этого нет, самостоятельно придётся.

Самый простой, но не самый надёжный способ - преобразовать этот текст в число функцией StringToDouble(): если в строке не число, то результат будет нулевым. Но если в строке нули, то результат тоже будет нулевым. Более надёжный - перебрать все символы и проверить, что каждый из них либо находится в интервале '0' - '9', либо является десятичной точкой (одна), либо является знаком минус (в начале).

ЗЫ. Написал для себя, пригодится.

bool StringIsNumber(const string sString)
{
   // преобразуем строку в массив символов, сохраняем их количество
   uchar ch[];
   int nTotalChars = StringToCharArray(sString, ch);
   nTotalChars--;      // закрывающий '\0' не учитываем
   
   // пробелы допускаются только в начале и в конце строки,
   // определим индексы начала и окончания строки без учёта
   // начальных и конечных пробелов
   int nStartPos = 0;
   int nEndPos = nTotalChars - 1;
   
   for(int i = 0; i < nTotalChars; i++)
   {
      if(ch[i] != ' ')
      {
         nStartPos = i;
         break;
      }
   }
   
   for(int i = nTotalChars - 1; i >= nStartPos; i--)
   {
      if(ch[i] != ' ')
      {
         nEndPos = i;
         break;
      }
   }
   
   // парсим оставшуюся часть строки
   int nDigitsNumber = 0;
   int nDotsNumber = 0;
   
   for(int i = nStartPos; i <= nEndPos; i++)
   {
      // проверим, является ли символ числом
      if(ch[i] >= '0' && ch[i] <= '9')
      {
         // подсчитываем количество цифр в строке (их должно быть не меньше одной)
         nDigitsNumber++;
      }
      // если текущий символ не является числом, то проверим его на знак и на точку
      else
      {
         // в начале строки допустим знак + или -
         if(i == nStartPos && (ch[i] == '+' || ch[i] == '-'))
            continue;
            
         // допускается одна десятичная точка
         else if(ch[i] == '.')
         {
            nDotsNumber++;
            continue;
         }
         
         // текущий символ не является ни цифрой, ни знаком, ни точкой - строка не является числом
         else
            return(false);
      }
   }
   
   // если парсинг прошёл успешно, то проверим количество цифр и десятичных точек
   if(nDigitsNumber == 0 || nDotsNumber > 1)
      return(false);
   
   return(true);
}
Vitaly Muzichenko
3912
Vitaly Muzichenko  
Roman Usenkov:
Добрый день, вывожу объект OBJ_Edit и мне нужно распознать что в нем цифра либо же какое-то слово или набор букв, как это реализовать?
Разбить строку на символы, потом проверять каждый символ функцией, далее есть цифра, вернуть результат "false", иначе "true" - надёжный способ
sigma7i
1249
sigma7i  

string это массив char символов. все символы расписаны в таблице ASCII

.ASCII 

получается определить что это цифра просто сравнить что char лежит в диапозоне >47 && < 58

Для текста тоже самое. английский 64 -122 русский 160-255.

Есть небольшие нюансы, google в помощь. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий