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

    +156

    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
    15. 15
    16. 16
    char* setw_c(int width, char* str, const char align){
        width = width - strlen(str) / 2; 
    
        if (align == 'l'){
            std::cout << str;
            if (width > 0)
                for (int i = 0; i < width - 1; i++)
                    std::cout << " ";
    		return " ";
        } else {
            if (width > 0)
                for (int i = 0; i < width; i++)
                    std::cout << " ";
    		return str;
        }
    }

    вот так коряво я решил проблему с setw(), кириллицей и utf-8.
    strlen() - чуть ли не единственная функция из cstring, более-менее нормально работающая с кириллицей в utf-8, да и то возвращает не реальную длину, а в два раза бОльшую, т.к. в utf-8 символ кириллицы занимает 2 байта, вместо одного, чего эта функция не учитывает.

    Запостил: bugaga_, 13 Ноября 2010

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

    • Поправка, return str; и return " "; должны стоять под своими if() и, в случае выравнивания по левому краю, будет выведен лишний пробел.
      Ответить
    • wchar_t надо было использовать и std::wstring, а не городить костыли на велосипеде
      Ответить
    • > вот так коряво я решил проблему с setw(), кириллицей и utf-8.

      решил??????

      выпей яду/убей себя об стену.
      Ответить
      • Не думаю, что при таком отношении к автору, ему захочется в следующий раз делиться говнокодом. ;)
        Ответить
        • я уверен что автору глубоко по барабану.

          если бы не было по барабану, то он бы 2 минуты своего драгоценного времени потратил чтобы гуглянуть как с utf-8/Unicode правильно работать надо - прежде чем вот это здесь постить.
          Ответить
          • Хм, ну а я не уверен, что автору глубоко по барабану.)
            Ответить
            • автору по барабану, но не глубоко, договорились ? :)
              Ответить
    • > strlen() - чуть ли не единственная функция из cstring, более-менее
      > нормально работающая с кириллицей в utf-8, да и то возвращает
      > не реальную длину, а в два раза бОльшую
      ВНЕЗАПНО!!!!1
      Ответить

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