crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в std::transform не работает при чтении строк из файла.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 5.8.2010, 23:05
  Проблема была с локалью, переустановил ее и все стало нормально! :)
DEADHUNT Дата 3.8.2010, 15:24
  в линуксе кодировка файла utf8, русские символы занимают несколько байт, поэтому и не работает. надо при чтении utf8 преобразовывать в wchar_t, а дальше использовать towlower.
AD Дата 3.8.2010, 14:31
 
Цитата(ViGOur @ 3.8.2010, 15:18) *
Еще выяснил, что не работает у меня под линуксом (ubuntu), а под виндой все в порядке!

Ну вот.... :) Работай под виндой, проблем не будет! :D
ViGOur Дата 3.8.2010, 14:18
 
Цитата(AD @ 3.8.2010, 15:09) *
У тебя указатель в файле, по идее, уже дошел до конца файла, что ты прочитываешь последним getline()
это я делал шаблон, для того, чтобы воспроизвести ошибку, потому лишнее и осталось. Поправил. :)

Еще выяснил, что не работает у меня под линуксом (ubuntu), а под виндой все в порядке!
AD Дата 3.8.2010, 14:09
  Я последние строчки кода не очень понял. У тебя указатель в файле, по идее, уже дошел до конца файла, что ты прочитываешь последним getline()? А вообще интересная проблемка. Будет минутка, попробую твой код! :)
ViGOur Дата 3.8.2010, 12:55
  Есть код:
#include <iostream>
#include <algorithm>
#include <string>
#include <fstream>

int main(void)
{
    std::ifstream file("dict.dat", std::ifstream::in);
    if( !file.is_open())
        return -1;
    while( !file.eof())
    {
        std::string line;
        getline( file, line);
  
        // прочитанные строки нужно lower'касить, но они не lower'касятся почему-то.
                // Тоесть остаются как были например "МоСКва СТОлица" не приводится к "москва столица"
        std::transform( line.begin(), line.end(), line.begin(), ::tolower);

        std::cout << line << std::endl;
    }

    std::string line1="New TESTING String";
    // А тут все нормально
    std::transform( line1.begin(), line1.end(), line1.begin(), ::tolower);
    std::cout << line1 << std::endl;

    return 0;
}
Но вот почему? Понять могу! :(
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:10