Сортировка слов в список из Txt
Например:
мне нужно разбить по словам в
стобик!
Так вот мне нужен наиоптимальнейший быстрый и правельный алгоритм для чтого чтобы эту слова можно было бы выстраить в столбик, вот так:
строка
котрую
мне
нужно
разбить
по
словам
в
стобик!
Я помудился и написал кое как и очень криво да и ещё получилось очень медленно и с ошибками..
пожалуйста, помогите..
Есть листы и очень не малые содержащие простой текст...
Например:
Так вот мне нужен наиоптимальнейший быстрый и правельный алгоритм для чтого чтобы эту слова можно было бы выстраить в столбик, вот так:
Я помудился и написал кое как и очень криво да и ещё получилось очень медленно и с ошибками..
и я вообще имею ввиду не только слова, а просто стоящие вместе символы типа Df335g!t r45
и разделённые пробелами или переходом на новую строку..
пожалуйста, помогите..
ifstream in ("in.txt");
ofstream out ("out.txt");
char str[255];
while ( in >> str )
out << str << endl;
как тебе это легко удалось!
а я то брал по отдельности вносил символы в str пока не встречался пробел или переход на новую строку потом скидывал содержимое str
очищал его и начинал снова наполнять по одному символу до пробела..
хмм..
РЕСПЕКТ ТЕБЕ! спасиба..
Если я правильно понял, тебе нужно следующее:
ifstream in ("in.txt");
ofstream out ("out.txt");
char str[255];
while ( in >> str )
out << str << endl;
А тебе не кажется, что этот код потенциально опасен?
ifstream in("C:\\in.txt");
for(int i = 1; i <= 999; i++)
{
fin.seekg(0, ios::beg); // смещение от начала файла на 0 символов
if(in.eof()) Caption = "EOF!"; /* сообщение о том что конец файла! почему
почему появляется это сообщение? если же было произведено смещение в самое его начало!?
получается что нет.. и следующий цикл while уже безполезен и не исполняется..
while(in >> str)/* некий код */;
}
хмм.. это же можно было записать и так:
for(int i = 1; i <= 999; i++)
{
ifstream in("C:\\in.txt");
if(in.eof()) Caption = "EOF!";/* этого сообщения уже не будет так как мы с каждым циклом
связываем поток с файлом, а по окончанию поток снимается. это так медленно! */
while(in >> str)/* некий код */;
}
Но дело в том что хоть второй вариант и верный, но он очень медленный!
если циклы большие...
как мне можно было бы правильно реализовать первый вариант там где
связка с файлом происходит один раз за циклом а не каждый раз в нём...
может я не верно произвожу смещение в начало??
А тебе не кажется, что этот код потенциально опасен?
Да ещё как!!!
возникла проблема...
........................
может я не верно произвожу смещение в начало??
Конечно, неверно. Смотрите в справке, там есть пример в описании basic_istream: seekg(0,ios_base::beg);
Именно ios_base::beg, а не ios::beg.
Да и незачем использовать эту форму seekg, когда есть абсолюное позиционирование на начало - seekg(0).
Да ещё как!!!
Если вы имеете в виду char str[255];, то вы правы. Можно использовать string str;
И всё равно позицирование seekg(0) непомогает и значение EOF остаётся!
хмм.. а почему char str[255] опасен?
И всё равно позицирование seekg(0) непомогает и значение EOF остаётся!
Почему опасен? Потому что считанная строка может оказаться гораздо больше, чем зарезервированная длина 255 символов.
Насчёт позиционирования. Если в программе именно так, как написано у Вас в посте:
for(int i = 1; i <= 999; i++)
{
fin.seekg(0, ios::beg); // смещение от начала файла на 0 символов
то получается, что открываете один файловый поток (in), а позиционируете другой (fin).