Скачать MetaTrader 5

как сравнить строки без учета регистра?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
В библиотеке MQL5 уже больше 1500 программ. Поделись и ты своей!
Forex Trader
114255
Forex Trader 2006.10.22 21:50 
как сравнить строки без учета регистра?
или как привести строку к какому-то регистру?
возникла такая необходимость а в описании что-то ничего не нахожу :(
неужели невозможно?
Forex Trader
114255
Forex Trader 2006.10.22 22:32  
Я думаю, надо что-то своё наворачивать с использованием функций StringGetChar() и StringSetChar():
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    switch (c) {
      case  97: n=65; break;      // a A
      case  98: n=66; break;      // b B
      case  99: n=67; break;      // c C
      case 100: n=68; break;      // d D
      case 101: n=69; break;      // e E
      case 102: n=70; break;      // f F
      case 103: n=71; break;      // g G
      case 104: n=72; break;      // h H
      case 105: n=73; break;      // i I
      case 106: n=74; break;      // j J
      case 107: n=75; break;      // k K
      case 108: n=76; break;      // l L
      case 109: n=77; break;      // m M
      case 110: n=78; break;      // n N
      case 111: n=79; break;      // o O
      case 112: n=80; break;      // p P
      case 113: n=81; break;      // q Q
      case 114: n=82; break;      // r R
      case 115: n=83; break;      // s S
      case 116: n=84; break;      // t T
      case 117: n=85; break;      // u U
      case 118: n=86; break;      // v V
      case 119: n=87; break;      // w W
      case 120: n=88; break;      // x X
      case 121: n=89; break;      // y Y
      case 122: n=90; break;      // z Z
    }
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}



Осталось для русских символов добавить и сделать аналогично StringLower

Forex Trader
114255
Forex Trader 2006.10.22 22:48  
Для латиницы немного проще сделал
string StringLower(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>64 && c<91) n=c+32;    // A-Z -> a-z
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}


С кириллицей проблема возникла. Строчные находятся в отрицательной области, а ПРОПИСНЫЕ некоторые имеют нулевой код.

Forex Trader
114255
Forex Trader 2006.10.22 22:55  
я тоже в эту сторону думал, но думал есть что-то встроенное
спасибо за код )
Forex Trader
114255
Forex Trader 2006.10.22 23:41  
Не проще ли использовать значение разницы между строчными и прописными??
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий