Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сортировка строк


Автор: try_to_get 21.4.2007, 19:10
Вводится, например 5 строк, в каждой строке могут быть любые символы. Затем вводится номер символа, например от 1 до 80. И по номеру символа нужно отсортировать 5 строк по убыванию или возрастанию. Вывод отсортированных строк.

Сделал вроде все правильно.
Код

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void main(){
  const int n = 5;
  char line[n][80];
  char l[1][80];
  int k;
  for(int i=0; i<5; ++i){
    cout << "\nEnter line: ";
    gets(line[i]);
  }
  do{
    cout << "\nEnter the number of character between 0 and 79 ";
    cin >> k;
  }while((k<0)||(k>79));
  for(int i=0;i<n;++i){
    for(int j=0;j<n-i;++j){
      if(int(line[j][k])>int(line[j+1][k])){
        strcpy(l[0],line[j]);
        strcpy(line[j],line[j+1]);
        strcpy(line[j+1],l[0]);
      }
    }
  }
  for(int f=0;f<n;++f){
    cout << endl << *(line+f) << endl;
  }
  getch();
}




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

Заранее благодарю!

Автор: ama_kid 21.4.2007, 20:28
попробуй организовать цикл сортировки попроще... К примеру типа такого:
Код
  for(int i=0;i<n;++i){
    for(int j=i;j<n;j++){
      if(int(line[j][k])<int(line[i][k])){
        strcpy(l[0],line[j]);
        strcpy(line[j],line[i]);
        strcpy(line[i],l[0]);
      }
    }
  }

Автор: try_to_get 21.4.2007, 21:08
Спасибо ama_kid.
Все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)