Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
#1

Алгоритм сортировки - C++

17.01.2009, 15:05. Просмотров 1595. Ответов 9
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста какой алгоритм можно использовать при решении такой задачи:
Дана строка char * из букв и цифр разделенных пробелами, нужно отсортировать слова в алфавитном порядке при этом цифры не учитывать.
К примеру
p2og3oda 2bu7la h9oros6hey6
Должно получится
2bu7la h9oros6hey6 p2og3oda
Код не вылаживаю т.к. не придумал, как делать(
Прошу писать не код, а алгоритм.
Спасибо.
http://www.cyberforum.ru/cpp-beginners/thread577362.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2009, 15:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Алгоритм сортировки (C++):

Алгоритм сортировки
Дан одномерный масив. мне в нем нужно отсортировать по возростанию только те...

Алгоритм сортировки
учитель попросил написать сортировку массива по возрастанию в общем виде ...

Алгоритм сортировки Шелла
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/21/2107.htm ...

Не работает алгоритм сортировки
Не работает алгоритм сортировки Ни при заполнении псевдослучайными числами,ни...

Алгоритм плавной сортировки (C++ -> Си)
static void SmoothSort(String Aarg, const int N) { int temp; A = Aarg; q...

9
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 15:20 #2
дял начала раздели предложение на лексемы используя strtok например, и сохрани слова в строковом массиве.
затем напиши функцию сравнения слов, чтото вроде
C++
1
2
3
4
5
int Compare (const char* str1, const char* str2)
{    while(isdigit(*str1)) {str1++;}
      while (isdigit(*str2)) {str2++;}
      return (*str1>*str2); // тоесть настрой указаетли на первые буквы и сравни их
 }
Затем используй алгоритм сортировки, который будет использовать функцию сравнения....как-то так
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
17.01.2009, 17:03  [ТС] #3
Через 1 место вышел у меня такой код))) Он сортирует слова по алфавиту, но учитывает только первые буквы + не учитывает цифры, доделаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    char a[50], tmp[20]; 
    strcpy(a,phrase);
    int c=0, cw=0;
 
    for(int l=1; l < strlen(phrase); l++)
        if( phrase[l] == ' ' && phrase[l+1] != ' ' && phrase[l+1] != '\0' )
            cw++;
 
    ++cw;
    cout<<"Words:"<<cw<<endl;
    char **words;
    words = new char*[cw];
 
    for(int i = 0; i < (cw); i++)
        words[i] = new char[20];
 
 
 
    char *ans = strtok(a," ");
    while( ans != NULL )
    {
        cout<<ans<<endl;
        strcpy(words[c++],ans);
        ans = strtok(NULL," ");
    }
 
    for(i=0; i < cw-1; i++)
    {
        for(int j=i+1; j < cw; j++)
        if(words[i][0] > words[j][0])
        {
            strcpy(tmp, words[i]);
            strcpy(words[i],words[j]);
            strcpy(words[j],tmp);
        }
    }
 
    for(i=0; i < cw; i++)
        cout<<words[i]<<" ";
    cout<<endl;
 
 
 
    for(i = 0; i < cw; i++)
        delete [] words[i];
    delete []words;
В результате:
den ochen bul aoroshim
<=>
aoroshim bul den ochen
0
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 17:21 #4
C++
1
2
3
4
// вместо
if(words[i][0] > words[j][0])
// используй... функцию не проверял....наверно в не кажый раз нужно указатель //устанавливать в начало
if (Compare(words[i], words[j]))
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
17.01.2009, 20:16  [ТС] #5
Что-то я не нашел прототипа этой функции
0
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 20:51 #6
C++
1
2
3
4
5
6
7
8
9
  
int Compare (const char* str1, const char* str2)   
{    
     char* a = &str1[0];
     char* b = &str2[0];
     while(isdigit(*a)) a++;   
      while (isdigit(*b)) b++;
      return (*a>*b); // тоесть настрой указаетли на первые буквы и сравни их   
 }
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
17.01.2009, 21:28  [ТС] #7
Что-то я не пойму этот код. Зачем в цикле увеличивать указатели? Я же только по первой букве сравниваю. и тогда по моему проще сравнить моим способом чем делать эту функцию. Или я что-то недопонял?
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
17.01.2009, 21:36 #8
p2og3oda 2bu7la h9oros6hey6
это три структуры такого вида

Код
struct {
    char *input;
    char *modif;
};
в input кладётся само слово, а в modif выборка символов алфавита
потом проводится обычная пузырьковая сортировка со strcmp всех структур по полю modif а затем сохранение полей input из получившегося порядка
0
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 21:40 #9
ты ж сравниваешь имено 1е буквы
тоесть например
2222222bbbb надо поменять местами c 2222aaaaa поэтому при сравнении надо добраться до букв игнорируя цифры..так??

Добавлено через 1 минуту 9 секунд
или вариант который accept предложил.
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
18.01.2009, 01:12  [ТС] #10
Ааа извиняюсь, я перепутал значения isdigit я подумал, что она возвращает истину если это Буква, а не цифра. Теперь ясно. Да спасибо за советы. Доделаю выложу, мб кому когда-нибудь понадобится.
0
18.01.2009, 01:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2009, 01:12
Привет! Вот еще темы с решениями:

Алгоритм сортировки,ошибка!
У меня алгоритм сортировки вставками но вот только не сортирует почему то ...

Реализовать алгоритм сортировки
На рисунке расположены, все возможные компоненты имеющие свойства x,y. Размер...

Алгоритм быстрой сортировки
Написать программу, реализующую алгоритм быстрой сортировки(рекурсивный) для...

Алгоритм квадратичной сортировки
Доброго времени суток! есть вот такая задача: При составлении программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru