1. C++ / Говнокод #776

    +141.4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    int __fastcall TForm1::iscomm(AnsiString str)
    {
    int i=1;
    while (str[i]==' ')
     i++;
    if (str[i]=='#')
     {
      return 1;
     }
    else
     {
      return 0;
     };
    };

    borland C++.
    Функция определяет, является ли строка комментарием (начинается с #)

    Запостил: guest, 26 Марта 2009

    Комментарии (14) RSS

    • А в чём соль?
      Ответить
    • А сам себе и ответил.
      То, что индекс с 1, это правильно, т.к. в VCL AnsiString именно таков. А в остальном прослеживается дельфи, причем среднего какчества.

      Нормальный бы, конечно, так написал:

      int __fastcall TForm1::iscomm(AnsiString str)
      {
        int i=1;
        while (str[i++]==' ');
        return str[i]=='#';
      }
      Ответить
    • страйкер:
      хм. а я подумал, что правильнее сделать сначала Trim() и если у получившейся строки осталось хоть что-то (length > 0), то проверить её первый символ. Наверное я ненормальный
      Ответить
    • Доброгость:
      Я бы регэксп зафигарил.
      Кстати, если в строка будет начинаться с символа табуляции, то вернется неправда в общем случае.
      Ответить
    • K O:
      а еще имя метода is*** предполагает логический тип возвращаемого значения.
      Ответить
    • жужиг:
      K O, в Сишном рантайме возвращают int
      например,
      int isspace( int c );
      Ответить
    • К О
      Вообще-то bool на самом деле является int или char. Зависит от среды разработки. Так-то
      Ответить
    • Капитан Очевидность 2.0:
      > Вообще-то bool на самом деле является int или char. Зависит от среды разработки. Так-то

      Вообще-то современным стандартом bool определен как эквивалент следующего определния:

      typedef enum {false, true} bool;

      И никакие ни char ни int тут рядом не лежали. Так-то
      Ответить
    • Ja!:
      Вообще то любой enum любым компилятором транслируется в int.
      Так-то :)
      Ответить
    • ахалай-махалай:
      Вообще-то нет :)
      Ответить
    • вообщето почему бы просто не искать # и не отбрасывать все остальное, какая-то дурная функция
      Ответить
    • int __fastcall TForm1::iscomm(AnsiString str)
      {
      char *p_str = str.c_str();
      while ((*p_str == ' ') || (*p_str == '\t')) p_str++;
      return *p_str == '#';
      }
      а мне больше так нравится ;)
      Ответить

    Добавить комментарий