Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Ошибка при копировании строк

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
почитай о том как работают библиотечные сортировки
qsort, например
 
функция сравнения возвращает три значения:
-1 == первое "меньше" второго
0 == "элементы сравнения" "равны"
+1 == первое "больше"
 
где "меньше"/"больше" в твоих терминах сравнения...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 22:27 02-02-2005 | Исправлено: akaGM, 16:53 03-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не мучайся, используй STL.
Чтение по словам:

Код:
 
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main(int argc, char* argv[])
{
using namespace std;
 
if (argc < 2)
{
cout << "Sorting string from file.\n\nUSAGE: test <filename>\n";
return 1;
}
 
ifstream in(argv[1]);
istream_iterator<string> bof(in), eof;
vector<string> buf(bof, eof);
sort(buf.begin(), buf.end());
 
copy(buf.begin(), buf.end(), ostream_iterator<string, char>(cout, "\n"));
 
return 0;
}
 

Чтение по строкам:

Код:
 
#include <iostream>
#include <fstream>
#include <list>
#include <sstream>
#include <algorithm>
#include <iterator>
 
int main(int argc, char* argv[])
{
using namespace std;
 
if (argc < 2)
{
cout << "Sorting string from file.\n\nUSAGE: test <filename>\n";
return 1;
}
 
ifstream in(argv[1]);
list<string> buf;
while (1)
{
stringbuf sb;
if (!in.get(sb))
break;
buf.push_back(sb.str());
in.get();
}
buf.sort();
 
copy(buf.begin(), buf.end(), ostream_iterator<string, char>(cout, "\n"));
 
return 0;
}
 

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 12:31 03-02-2005 | Исправлено: nobody2, 13:34 03-02-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да можно не мучиться и вообще ничего не делать...
все уже кем-то где-то и гораздо лучше сделано...
ну да ладно, это философия...
 
а вот практический совет...
 
берешь и подключаешь стандартную сортировку...
если все работает как надо, то ищешь ошибки в реализации
своего сорта...
если ничего не работает, то смотришь на свой оставшийся код
вне сортировки, который готовит последней данные...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 15:09 03-02-2005 | Исправлено: akaGM, 15:10 03-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
да можно не мучиться и вообще ничего не делать...  
все уже кем-то где-то и гораздо лучше сделано...  
ну да ладно, это философия...

 
Это не философия, а суровая правда жизни
 
Нефиг велосипед изобретать, все равно с таким уровнем знаний и опыта ниче лучше самоката не получится.
 
Сначала надо научиться пользоваться СТАНДАРТНЫМИ (т.е. включенными в стандарт ansi/iso/iec 14882:2003) инструментами.

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 16:42 03-02-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Сначала надо научиться пользоваться СТАНДАРТНЫМИ

это техника...
этому и бибизяну можно научить...
а вот мыслить, иметь методу и осмысленный подход (что, кстати, пригодится
не только в программировании)...
 
кста, системный анализ гораздо выше котируется в мире нежели кодинг...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 16:51 03-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
это техника

это скорее набор основных понятий, без которых мысли похожи на бред.
 

Цитата:
кста, системный анализ гораздо выше котируется в мире нежели кодинг

кто бы спорил!
Вот только ни один нормальный аналитик не будет систему с нуля строить. За основу всегда берутся некоторые паттерны.

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 18:39 03-02-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
это скорее набор основных понятий, без которых мысли похожи на бред.  

это уже третий раз, когда меня здесь обвиняют в бреде...
в этом случае основное понятие -- знание интерфейса функи сорт (в нашем примере), т.е.
_что_ она умеет делать... а отнюдь не _как_...
 

Цитата:
Вот только ни один нормальный аналитик не будет систему с нуля строить. За основу всегда берутся некоторые паттерны.

ну а паттерны, конечно, -- необходимая данность этого мира... сами собой появились...
и никто не занимался обобщением и превращением их в "паттерны"...
 

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 19:05 03-02-2005
Excell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
вот я использовал стандартную функцию qsort, результат ТОТ ЖЕ что и моей проги..т.е вывод на экран, без сортировки!

Код:
 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define size 200
int pstrcmp (const void*, const void*);
void main (int argc, char *argv[])
{
char buf[size], *str[100];
int i,num;
FILE *in;
if (argc<2)
{
puts("Слишком мало параметров!");
getch();
exit(1);
}
in=fopen(argv[1],"r+b");
if (in == NULL)
{
printf ("File %s is not exist!",argv[1]);
getch();
exit(1);
}
i=0;
while (fgets(buf,size-1,in) != NULL)
{
str[i]=(char*)malloc(strlen(buf)+1);
strcpy(str[i],buf);
i++;
}
num=i;
qsort (str,i,sizeof(char*),pstrcmp);
for (i=0;i<num;i++)
printf ("%s\n",str[i]);
getch();
}
int pstrcmp (const void *p1, const void *p2)
{
return (strcmp(*(char**)p1,*(char**)p2));
}
 
 

nobody2
в теме же написано, что используем, Си, а не С++, но все равно спасибо
 


----------
Построю лабиринт, в котором смогу затеряться с тем, кто захочет меня найти... Кто это сказал и о чем?

Всего записей: 1554 | Зарегистр. 31-08-2002 | Отправлено: 19:20 03-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
это уже третий раз, когда меня здесь обвиняют в бреде...  

"Ничего личного, бизнес есть бизнес" (с) не_поню_кто
 

Цитата:
в этом случае основное понятие -- знание интерфейса функи сорт (в нашем примере), т.е.  
_что_ она умеет делать... а отнюдь не _как_...  

Я не в коей мере не борюсь за то, чтобы рассматривать стандартные алгоритмы как "черный ящик" - знать, что подать на вход, и что в результате получится на выходе, и больше ничего.
 
Просто меня добивает, когда очередную задачу по сортировке массива и вывода его на консоль превращают в изобретение велосипеда.
 
Если нужно узнать, "в целях повышения образованности" (с) п.Печкин, как работает тот или иной алгоритм, то надо просто об этом и спросить или сделать предположение.
 
ИМХО, все конечно, ИМХО...

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 19:31 03-02-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Excell
мне повторять?

Цитата:
 
берешь и подключаешь стандартную сортировку...
если все работает как надо, то ищешь ошибки в реализации
своего сорта...
если ничего не работает, то смотришь на свой оставшийся код
вне сортировки, который готовит последней данные...


Цитата:
 
почитай о том как работают библиотечные сортировки
qsort, например
 
функция сравнения возвращает три значения:
-1 == первое "меньше" второго
0 == "элементы сравнения" "равны"
+1 == первое "больше"
 
где "меньше"/"больше" в твоих терминах сравнения...  
 

 
хотя в последнем я могу и ошибаться насчет возвращаемого значения функции...
 
 
Добавлено:
nobody2

Цитата:
 
Просто меня добивает, когда очередную задачу по сортировке массива и вывода его на консоль превращают в изобретение велосипеда.  
 

...что бывает иногда очень и очень полезно во всех отношениях...
особенно на этапе обучения...
 
Добавлено:
 

Код:
 
НАЗВАНИЕ
       qsort - упорядочивает массив
 
СИНТАКСИС
       #include <stdlib.h>
 
       void qsort(void *base, size_t nmemb, size_t size,
                         int(*compar)(const void *, const void *));
 
ОПИСАНИЕ
       Функция  qsort()  упорядочивает  массив из nmemb элементов
       размером size. Аргумент base указывает на начало  массива.
 
       Содержимое    массива   располагается   по   возрастающему
       принципу,  согласно   функции   сравнения,   указанной   в
       параметре  compar  и  имеющей  два аргумента (сравниваемые
       элементы массива).
 
       Функция сравнения должна возвращать  целое  число  меньше,
       больше   нуля   или  равное  ему,  если  первый  аргумент,
       соответственно, меньше, больше второго или равен ему. Если
       два  члена  массива  равны,  то  порядок их расположения в
       массиве не определен.
 

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 19:34 03-02-2005 | Исправлено: akaGM, 20:04 03-02-2005
Excell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
хотя в последнем я могу и ошибаться насчет возвращаемого значения функции...  

нет, я точно знаю, что она возвращает -1/0/1
nobody2

Цитата:
Просто меня добивает, когда очередную задачу по сортировке массива и вывода его на консоль превращают в изобретение велосипеда.  

а ясли хочется разобраться с массивами указателй или с указателем на фукцию, то что делать сидеть и строить сложение двух чисел?akaGM

Цитата:
...что бывает иногда очень и очень полезно во всех отношениях...  
особенно на этапе обучения...  
 

полностью поддерживаю

----------
Построю лабиринт, в котором смогу затеряться с тем, кто захочет меня найти... Кто это сказал и о чем?

Всего записей: 1554 | Зарегистр. 31-08-2002 | Отправлено: 22:46 03-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а ясли хочется разобраться с массивами указателй или с указателем на фукцию, то что делать сидеть и строить сложение двух чисел?

Время массивов указателей и указателей на функции для прикладного программирования закончилось в 1994-95 гг.
Вместо массивов указателей проще, безопасней, и эффективней использовать контейнеры и стандартной библиотеки С++.
Вместо указателей на функции - функторы (выражения, к котрорым может быть применен синтаксис вызова функции).

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 12:01 04-02-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
Учитель: -- время букв, слогов и слов закончилось, теперь мы пишем сразу предложениями!
Ученик: -- да, Учитель...
скажите пожалуйста, а что это за такие маленькие черные букашечки, из которых состоят предложения, зачем они?...
 

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 14:54 04-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прямо в цель !!!

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 15:31 04-02-2005
Excell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
nobody2
похоже во флейм нам пора
Достать бы мне книжку Страуструпа 3е издание, тогда бы использовал контейнеры и функторы

----------
Построю лабиринт, в котором смогу затеряться с тем, кто захочет меня найти... Кто это сказал и о чем?

Всего записей: 1554 | Зарегистр. 31-08-2002 | Отправлено: 19:11 04-02-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
меня удивляет как именно на руборде понимают (искаженно) понятие "флейм"...
флейм -- жесткая, порой неоправданная, неаргументированная критика всех и вся...
а вот флуд...
но пусть в меня первый кинет "+" тот, кто скажет, что в моих постах одно лишь "невтемье"...
 
------

Цитата:
Достать бы мне...

а в чем проблема?
например
http://chipset31.narod.ru/books/cpp/tcpppl3spec.pdf
~3 мб

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 19:23 04-02-2005 | Исправлено: akaGM, 19:29 04-02-2005
Excell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
а в чем проблема?  
например  
http://chipset31.narod.ru/books/cpp/tcpppl3spec.pdf  
~3 мб

на английском у меня уже есть, но все равно thx!

----------
Построю лабиринт, в котором смогу затеряться с тем, кто захочет меня найти... Кто это сказал и о чем?

Всего записей: 1554 | Зарегистр. 31-08-2002 | Отправлено: 10:40 05-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Excell
На русском я встречал в сети.
 
http://lib.ru/CPPHB/
http://prog.dax.ru/docs/cpp/

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 12:35 07-02-2005
Excell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nobody2

Цитата:
На русском я встречал в сети.  

да, я тоже встречал, но это не спец. издание (3-е)
а второе дополненное, а между ними разница довольно велика

----------
Построю лабиринт, в котором смогу затеряться с тем, кто захочет меня найти... Кто это сказал и о чем?

Всего записей: 1554 | Зарегистр. 31-08-2002 | Отправлено: 17:43 07-02-2005
nobody2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это я сайты с первой страницы поиска в гугле привел. Так что просто поискать по лучше надо.  
 
А в спец. издании по сравнению с третьим только 2 приложения добавились (по локалям и еще по чему-то).

Всего записей: 223 | Зарегистр. 15-07-2003 | Отправлено: 19:27 07-02-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Ошибка при копировании строк


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru