Сортровка строк
Затем эти строки нужно отсортировать любым методом, кроме метода пузырька.
P.S. Нельзя использовать стандартные функции сортровок, эта ф-ия должна быть написана.
Пожалуйста, выручите
Надо создать динамический массив, в который программным путем вбиваются строки.
Затем эти строки нужно отсортировать любым методом, кроме метода пузырька.
P.S. Нельзя использовать стандартные функции сортровок, эта ф-ия должна быть написана.
Пожалуйста, выручите
Если можно узнать, сколько строк будет, то:
printf("how mutch strings: ");
scanf("%d",&s_num);
char **strings = new char*[s_num];
for(int i=0;i<s_num;++s_num)
{
strings = new char[1024];
printf("enter string #%d: ");
gets(strings);
}
// Для того, чтобы отсортировать, делаем ещё один массивчик
char **s_res = new char*[s_num];
// Вызываем функцию сортировки ;)
sort_strings(strings, s_res);
// и выводим результат пользователю
// В функции сортировки мы просто бирём (например, из инета) уже написанный кем-ни будь код и заменяем сравнение "<" (или какое там будет) на свою функцию "is_bigger(const char *s1, const char *s2)"
bool is_bigger(const char *s1, const char *s2)
{
if(strlen(s1)>strlen(s2)) return true;
if(strlen(s1)<strlen(s2)) return false;
for(int i=0;i<strlen(s1);++i)
if(s1<s2) return false;
return true;
}
//Можно, конечно и обычную strcmp(s1,s2) юзать - она возвращает разницу s1-s2, тока, кажется, размер строк как-то по другому учитывает
А если заранее не известно, сколько строк будет введено, то массив не прокатит, нужно юзать список:
struct str_node
{
char *str;
struct str_node *next;
str_node(char *s, str_node *n)
{
str = s;
next = n;
}
}
Ввод соответственно будет тоже другой:
str_node *root=NULL;
char *temp=NULL;
do{
temp = new char[1024];
printf("Enter string (or 'quit' to exit):");
if(temp!=gets(temp) || !strcmp(temp,"quit")) break;
str_node *x = new str_node(temp, root);
root = x;
}while(1);
if(temp) delete[] temp;
Ну и во всех обходах вместо фора, пишешь так:
for(str_node *x=root;x;x=x->next){
// соответственна текущая строка будет:
char *dur_str = x->str;
}
Не забудь потом очистить всю выделенную память.
Надо создать динамический массив, в который программным путем вбиваются строки.
Затем эти строки нужно отсортировать любым методом, кроме метода пузырька.
P.S. Нельзя использовать стандартные функции сортровок, эта ф-ия должна быть написана.
Пожалуйста, выручите
зайди сюда посмотри алгоритмы сортировки
Если можно узнать, сколько строк будет, то:
printf("how mutch strings: ");
scanf("%d",&s_num);
char **strings = new char*[s_num];
for(int i=0;i<s_num;++s_num)
{
strings = new char[1024];
printf("enter string #%d: ");
gets(strings);
}
// Для того, чтобы отсортировать, делаем ещё один массивчик
char **s_res = new char*[s_num];
// Вызываем функцию сортировки ;)
sort_strings(strings, s_res);
// и выводим результат пользователю
// В функции сортировки мы просто бирём (например, из инета) уже написанный кем-ни будь код и заменяем сравнение "<" (или какое там будет) на свою функцию "is_bigger(const char *s1, const char *s2)"
bool is_bigger(const char *s1, const char *s2)
{
if(strlen(s1)>strlen(s2)) return true;
if(strlen(s1)<strlen(s2)) return false;
for(int i=0;i<strlen(s1);++i)
if(s1<s2) return false;
return true;
}
//Можно, конечно и обычную strcmp(s1,s2) юзать - она возвращает разницу s1-s2, тока, кажется, размер строк как-то по другому учитывает
А если заранее не известно, сколько строк будет введено, то массив не прокатит, нужно юзать список:
struct str_node
{
char *str;
struct str_node *next;
str_node(char *s, str_node *n)
{
str = s;
next = n;
}
}
Ввод соответственно будет тоже другой:
str_node *root=NULL;
char *temp=NULL;
do{
temp = new char[1024];
printf("Enter string (or 'quit' to exit):");
if(temp!=gets(temp) || !strcmp(temp,"quit")) break;
str_node *x = new str_node(temp, root);
root = x;
}while(1);
if(temp) delete[] temp;
Ну и во всех обходах вместо фора, пишешь так:
for(str_node *x=root;x;x=x->next){
// соответственна текущая строка будет:
char *dur_str = x->str;
}
Не забудь потом очистить всю выделенную память.
Ужас! Ну и смесь С++ и С, да ещё с багами:
printf("enter string #%d: ");
gets(strings);
Использовать НЕЛЬЗЯ, переполнение буффера.......
Да и никто так не делает, а в С++ есть коньтейнеры, например контейнер string и контейнер vector, так что можно заюзать конейнер vector контейнеров string.
Вот для С++ , непроверял, сортировка по методу выбора, просто и быстро работает:
#include<iostream>
#include<strings>
mysort(vector<string>& strs){
int i,j,indmax;
string maxstr;
for (i=strs.begin();i<strs.end();i++){
maxstr=strs;
indmax=i;
for (j=i+1;i<strs.size();j++){
if (strs[j]>maxstr){
maxstr=strs[j];
indmax=j;
}
}
if (indmax!=i){
strs[indmax]=strs;
strs=maxstr;
}
}
}
void main(){
vector<string> strs;
string mystr;
cout << "Enter some strings (Press Ctrl+Z to stop)\n";
while (cin >> mystr)
strs.push_back(mystr);
mysort(strs);
}
С тоже разный бывает, если борландовский, то там есть всякие readln, а если не борландовский, то там надо писать процедуру, которая с консоли читать будет, вообщем больше инфы, на чём надо тебе???
А вообще самый рульный алгоритм, это пирамидальная сортировка. Токо программит немного сложней.