crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> std::transform не работает при чтении строк из файла., что не правильно делаю, подскажите?
ViGOur
  опции профиля:
сообщение 3.8.2010, 12:55
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Есть код:
#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
  опции профиля:
сообщение 3.8.2010, 14:09
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Я последние строчки кода не очень понял. У тебя указатель в файле, по идее, уже дошел до конца файла, что ты прочитываешь последним getline()? А вообще интересная проблемка. Будет минутка, попробую твой код! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.8.2010, 14:18
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


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

Еще выяснил, что не работает у меня под линуксом (ubuntu), а под виндой все в порядке!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.8.2010, 14:31
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


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

Ну вот.... :) Работай под виндой, проблем не будет! :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 3.8.2010, 15:24
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


в линуксе кодировка файла utf8, русские символы занимают несколько байт, поэтому и не работает. надо при чтении utf8 преобразовывать в wchar_t, а дальше использовать towlower.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 5.8.2010, 23:05
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Проблема была с локалью, переустановил ее и все стало нормально! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 23:17