Страница 2 из 2
Добавлено: 30 ноя 2005, 14:33
shpi0
WinMain, а как можно удалить память внутри функции, ведь потом надо возвратить строку, под которую эта память выделялась.
А насчет статических массивов - это ж прога в универ, там преподы требуют чтоб делали именно так, а сами объяснять ниче не хотят...
Добавлено: 30 ноя 2005, 15:03
WinMain
В остальных функциях у тебя в качестве пареметра передаётся указатель на строку. Вот и в функцию fillrand() передавай его как параметр. А выделение памяти убери из fillrand() и перенеси в функцию main().
Добавлено: 30 ноя 2005, 15:28
shpi0
Попробовал так сделать...
Код: Выделить всё
char *fillrand(int k,char *s_random)
{
int i;
for (i=0;i<k;i++)
s_random[i]=random(25)+97;
s_random[k] = 0;
return s_random;
}
И main:
Код: Выделить всё
main()
{
clrscr();
randomize();
int k=1000;
char *s = new char[k+1];
char *sorted = new char[k+1];
unsigned long sum;
unsigned int runnumb;
s=fillrand(k,s);
FILE *f=fopen(filename,"w+");
if (f==NULL)
{
printf("\nCant open file!");
getche();
return 0;
}
printf("%d %s\n\n%d %s\nReady.\n\n",strlen(s),s,strlen(sorted),sorted);
// fputs(s,f);
// fputs("\n\n",f);
sorted=shakersort(s);
// fputs(sorted,f);
fclose(f);
printf("%d %s\n\n%d %s\nReady.",strlen(s),s,strlen(sorted),sorted);
delete[] sorted;
delete s;
getche();
return 1;
}
Для sorted надо тоже память выделять? Сам-то массив у меня генерируется, а вот с функцией сортировки shakersort что-то не то... Ее когда вызываю, у меня и s и sorted становятся строками из одного символа (сам алгоритм рабочий).
Добавлено: 30 ноя 2005, 15:41
WinMain
Функция shakersort() возвращает указатель на строку s, поэтому для sorted выделять память не нужно. Да и вообще эта переменная здесь лишняя.
Добавлено: 30 ноя 2005, 16:24
shpi0
У меня в shakersort() что-то неправильно? Она строку просто обрезает до одного символа, еще в первом цикле
Код: Выделить всё
for (j=r;j>l;j--)
if (st[j]<st[j-1])
{
buf=st[j];
st[j]=st[j-1];
st[j-1]=buf;
}
Добавлено: 01 дек 2005, 12:01
shpi0
Вопрос снят, тока щас дошло что это из-за того что последний символ 0... ))) Щас буду делать еще куча тупых вопросов появится...