Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: std::transform не работает при чтении строк из файла.
Форум на CrossPlatform.RU > Разработка > С\С++
ViGOur
Есть код:
#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;
}
Но вот почему? Понять могу! :(
AD
Я последние строчки кода не очень понял. У тебя указатель в файле, по идее, уже дошел до конца файла, что ты прочитываешь последним getline()? А вообще интересная проблемка. Будет минутка, попробую твой код! :)
ViGOur
Цитата(AD @ 3.8.2010, 15:09) *
У тебя указатель в файле, по идее, уже дошел до конца файла, что ты прочитываешь последним getline()
это я делал шаблон, для того, чтобы воспроизвести ошибку, потому лишнее и осталось. Поправил. :)

Еще выяснил, что не работает у меня под линуксом (ubuntu), а под виндой все в порядке!
AD
Цитата(ViGOur @ 3.8.2010, 15:18) *
Еще выяснил, что не работает у меня под линуксом (ubuntu), а под виндой все в порядке!

Ну вот.... :) Работай под виндой, проблем не будет! :D
DEADHUNT
в линуксе кодировка файла utf8, русские символы занимают несколько байт, поэтому и не работает. надо при чтении utf8 преобразовывать в wchar_t, а дальше использовать towlower.
ViGOur
Проблема была с локалью, переустановил ее и все стало нормально! :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.