1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

Задача: Сортировка по убыванию [Строки и субстроки]

Тема в разделе "C/C++/C#", создана пользователем Refrator, 12 ноя 2010.

Наш партнер Genesis Hackspace
  1. Refrator

    Refrator Гость

    Нужно написать прогу которая отсортирует по убыванию данные.Сначало вводится число,которая указывает на количество массивов,которые будут вводится,а вторую линию сами массивы:
    Вводим
    3
    333333 66
    888888 99
    111111 44

    Выводит
    888888 99
    333333 66
    111111 44

    Сортирует по числам правой части,а если 2 числа будут равны ,сортирует по числам в левой части.

    Я пробовал ,но у меня не получается даже вводит массивы

     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Давай сначало определимся, какие данные сортируем, у тебя что то про "строку" встретилось, но в коде как я понимаю рассматривается число....
    И еще фраза "количество массивов" - то ли это реально ко-во массив, то ли это все же размер массива, буду исходить из того что это все же у тебя кол-во массиво

    Теперь рассмотрим твой код:
    Тут все логично, определяешь i и вводишь в нее кол-во "кол-во массивов"
    А далье я вижу
    Хотя определения А я не нашел, но т.к. ты говорил про ко-во массив и судя по коду- наверное это все же строка (char*), а сортируемые данные у тебя тогда выходит что - символы (char)

    следовательно,
    Код (C++):
    #include<iostream>
    using namespace std;
    int main ()
    {
    char**a; //Наш массив строк или другими словами : Массив указателей на массив символов
    int i;
    cin>>i;
    //Когда мы получили кол-во массивов, то обязаны динамически выделить память под массив строк
    a = new char*[i];
    //Теперь к твоему вводу данных
    getchar(); //Уберем последний символ с потока он у нас '\n'
    for(int r=0;r<i;r++)
    {
    a[r] = new char[128]; //Выделим память для строки 128-символов (включая нулевой) - максимум
    gets(a[r]); //И получаем строку     
    }

    //Вывод на экран что бы ты увидел что вышло
    cout<<endl<<"A: = {"<<endl;
    for (int r = 0; r< i; r++)
    {
    cout<<a[r]<<endl;
    }
    cout<<"}";

    //Ну а теперь к сортировки там например
    for (int j = 0; j<i; j++) //Перебираем массив строк
    {
    for (int k = 0; k<strlen(a[j]); k++) //Перебираем каждый символ строки
    {
    for (int m = k+1; m<strlen(a[j]); m++) //Вложиным перебираем каждый символ строки от символа k+
    {
    if ((unsigned char)a[j][k] < (unsigned char)a[j][m]) //Если текущий символ k < следующего то меняем символы местами
    {
    char Temp = a[j][k];
    a[j][k] = a[j][m];
    a[j][m] = Temp;
    }

    }
    }
    }

    //Вывод на экран что бы ты увидел что вышло
    cout<<endl<<"A: = {"<<endl;
    for (int r = 0; r< i; r++)
    {
    cout<<a[r]<<endl;
    }
    cout<<"}";

    return 0;
    }
     

    Вложения:

    • Задача: Сортировка по убыванию [Строки и субстроки]
      zd39099_1.jpg
      Размер файла:
      55,4 КБ
      Просмотров:
      7
  3. ALDon

    ALDon Гость

     
  4. Refrator

    Refrator Гость

    DarkKnight125,мне нужно отсортировать по убыванию,а этот код сортирует возрастанию
     
  5. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Не работает ??? В чем "Не рабочее состояние его проявляется?"

    Код сортирует символы строки по убыванию, я просо из задания точно так и не понял что должно сортироваться ;-)))
    Если опишишь дословно, что сортировать надо, то исравлю конечно, у тебя просто в конт. примере показанно (сортировка строк), а в задании :
    ну посчитал все же что это все же то что лежит внутри массивов
     
  6. ALDon

    ALDon Гость

    Этот код ничего не делает а только выводит ввод.Не понял или у меня с студиой не в порядке
     
  7. acorn

    acorn PHP Developer
    Web Team

    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    3
    Я всё равно не понял что надо сортировать ;)
     
  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ааа... Понял ;-)) Тоже не сразу дошло ;-)))
    Сортировать нужно сначало поправой части идущей после пробела ;-))
    xxxxxxxx yyy
    Типо Order by yyy, xxxxxxxx
    Щас погоди, переделаю ;-)
     
  9. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Вот держи...
    Важно : Еще раз напомню, что мы сравниваем строки, так что например "57" > "562", размерность тоесть должна быть одинаковая
    если нужно будет именно целочисленные типы сравнивать то нужно преобразовывать например atoi-функцией.

    Код (C++):
    /*
    codeby.net
    Autor: DarkKnight125
    */

    #include<iostream>
    using namespace std;

    int main ()
    {
    setlocale(LC_ALL,"Russian"); //Переведем локаль в кодовую страницу .1251
    char**a; //Наш массив строк или другими словами : Массив указателей на массив символов
    int i;
    cout<<"Введите размерность массива : ";
    cin>>i;
    //Когда мы получили кол-во массивов, то обязаны динамически выделить память под массив строк
    a = new char*[i];
    //Теперь к твоему вводу данных
    getchar(); //Уберем последний символ с потока он у нас '\n'
    cout<<"Введите массивы : "<<endl;
    for(int r=0;r<i;r++)
    {
    a[r] = new char[128]; //Выделим память для строки 128-символов (включая нулевой) - максимум
    gets(a[r]); //И получаем строку     
    }

    //Вывод на экран что бы ты увидел что вышло   
    cout<<endl<<"Массив A: = {"<<endl;
    for (int r = 0; r< i; r++)
    {
    cout<<a[r]<<endl;
    }
    cout<<"}";


    //Ну а теперь к сортировки там например
    char buffer[80]; //Введем буферную переменную
    for (int j = 0; j<i; j++) //Перебираем массив строк
    {
    for (int k =j+1; k<i; k++) //Перебираем массив строк, но со след. строки
    {
    bool isCross = false; //Переменная замены - если тру то нужно менять местами строки
    char *k1 = strstr(a[j]," ")+1; char *k2 = strstr(a[k]," ")+1; //*может понадобиться* если нужно будет сравнивать числовые типы
    if (strcmp(strstr(a[j]," "),strstr(a[k]," ")) < 0) //Сравним строки от пробельного символа
    isCross = true; //Если 1 строка меньше следующей то нужно менять
    else if (strcmp(strstr(a[j]," "),strstr(a[k]," ")) ==0)
    if(strncmp(a[j],a[k],strlen(a[j])-strlen(strstr(a[j]," "))) < 0) //Сравним строки до пробельного символа
    isCross = true; //Та же история что и вверху

    if (isCross) //Если нужно менять то
    {
    strcpy(buffer,a[j]); //Запишим j-ю строку в буфер
    strcpy(a[j],a[k]); //Запишим k строку в j
    strcpy(a[k],buffer); //Запишим буфер в k строку
    }
    }
    }

    //Вывод на экран что бы ты увидел что вышло
    cout<<endl<<"Результат после сортировки:";
    cout<<endl<<"A: = {"<<endl;
    for (int r = 0; r< i; r++)
    {
    cout<<a[r]<<endl;
    }
    cout<<"}";

    return 0;
    }
     

    Вложения:

    • Задача: Сортировка по убыванию [Строки и субстроки]
      zd39099.jpg
      Размер файла:
      61,3 КБ
      Просмотров:
      7
Загрузка...
Похожие Темы - Задача Сортировка по
  1. Exilien
    Ответов:
    2
    Просмотров:
    3.203
  2. School_Information

    Решите Задача

    Ответов:
    2
    Просмотров:
    96
  3. KhNarg
    Ответов:
    2
    Просмотров:
    167
  4. Янчик
    Ответов:
    0
    Просмотров:
    618
  5. TrishaRay
    Ответов:
    1
    Просмотров:
    865

Поделиться этой страницей