проблема с созданием строки

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

WinMain, а как можно удалить память внутри функции, ведь потом надо возвратить строку, под которую эта память выделялась.
А насчет статических массивов - это ж прога в универ, там преподы требуют чтоб делали именно так, а сами объяснять ниче не хотят...
Даже самое длинное путешествие начинается с первого шага.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В остальных функциях у тебя в качестве пареметра передаётся указатель на строку. Вот и в функцию fillrand() передавай его как параметр. А выделение памяти убери из fillrand() и перенеси в функцию main().
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

Попробовал так сделать...

Код: Выделить всё

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 становятся строками из одного символа (сам алгоритм рабочий).
Даже самое длинное путешествие начинается с первого шага.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Функция shakersort() возвращает указатель на строку s, поэтому для sorted выделять память не нужно. Да и вообще эта переменная здесь лишняя.
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

У меня в 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; 
    } 
Даже самое длинное путешествие начинается с первого шага.
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

Вопрос снят, тока щас дошло что это из-за того что последний символ 0... ))) Щас буду делать еще куча тупых вопросов появится...
Даже самое длинное путешествие начинается с первого шага.
Ответить