Кресты / Говнокод #776 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 guest, (Updated )

Комментарии (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 == '#';
    }
    а мне больше так нравится 😉
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8