Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ivsamiylov
1 / 1 / 1
Регистрация: 31.03.2012
Сообщений: 49
1

Как сортировать строки?

06.04.2012, 14:40. Просмотров 1007. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста, есть структура с полем символьного типа, также объявлен массив структурного типа.
C
1
2
3
4
5
struct words 
    {
        char word_for_anagram[20]; // слово
        int size_word; //поле для хранения размера слова
    } word[1000];
и также есть 1000 слов, задача отсортировать эти слова по убыванию с "я" до "а", при этом слова разной длины, как можно сравнивать слова, кроме посимвольного сравнения, какие лучше использовать библиотеки и фун-ии? заранее спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 14:40
Ответы с готовыми решениями:

Сортировать строки матрицы по возрастанию их минимумов
Написать программу, которая позволяет в каждой строке квадратной матрицы искать минимум и...

Сортировать (переставить) строки матрицы в порядке убывания значений первых элементов строк
Данная действительно матрица размером n * m. Сортировать (переставить) строки матрицы в порядке...

Как сортировать трехмерный массив
Помогите разобраться как отсортировать массив в котором больше двух измерений! Буду очень...

Как сортировать строки на js?
Всем привет! Как сортировать строки на js? Вот код: <!DOCTYPE html> <html> <body> <form...

Как сортировать строки в файлах
Подскажите как сортировать строки в файлах.

6
Catstail
Модератор
24538 / 12454 / 2275
Регистрация: 12.02.2012
Сообщений: 20,220
06.04.2012, 14:57 2
Вполне подойдет strcmp
1
ivsamiylov
1 / 1 / 1
Регистрация: 31.03.2012
Сообщений: 49
06.04.2012, 15:09  [ТС] 3
Спасибо вечером опробую
0
ivsamiylov
1 / 1 / 1
Регистрация: 31.03.2012
Сообщений: 49
09.04.2012, 15:10  [ТС] 4
попробовал я strcmp и вот что получилось, по сути программа сортирует, но как-то странно 5 слов спокойно, а вот 20 слов уже затупливает и сортирует криво
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
struct words_anagrams 
    {
        char word_for_anagram[20]; 
        int size_word; 
    
    } ;
    int j=0,i,z,n,m;
    char word[20];
    struct words_anagrams word_Anagram[20]; 
        strcpy(word_Anagram[0].word_for_anagram, "стук");
        strcpy(word_Anagram[1].word_for_anagram, "окса");
        strcpy(word_Anagram[2].word_for_anagram, "автор");
        strcpy(word_Anagram[3].word_for_anagram, "товар");
        strcpy(word_Anagram[4].word_for_anagram, "отвар");
        strcpy(word_Anagram[5].word_for_anagram, "тавро");
        strcpy(word_Anagram[6].word_for_anagram, "клоун");
        strcpy(word_Anagram[7].word_for_anagram, "колун");
        strcpy(word_Anagram[8].word_for_anagram, "кулон");
        strcpy(word_Anagram[9].word_for_anagram, "лукно");
        strcpy(word_Anagram[10].word_for_anagram, "уклон");
        strcpy(word_Anagram[11].word_for_anagram, "опрос");
        strcpy(word_Anagram[12].word_for_anagram, "порос");
        strcpy(word_Anagram[13].word_for_anagram, "просо");
        strcpy(word_Anagram[14].word_for_anagram, "сопор");
        strcpy(word_Anagram[15].word_for_anagram, "арак");
        strcpy(word_Anagram[16].word_for_anagram, "арка");
        strcpy(word_Anagram[17].word_for_anagram, "кара");
        strcpy(word_Anagram[18].word_for_anagram, "рака");
        strcpy(word_Anagram[19].word_for_anagram, "куст");
        for(j=0;j<20;j++)
        {
            word_Anagram[j].size_word=0;
            for(i=0;word_Anagram[j].word_for_anagram[i]!='\0';i++)
            {
                word_Anagram[j].size_word++; 
            }
        }       
    for(m=0;m<20;m++)
    {
        for(j=0;j<20;j++)
        {
            if(strcmp(word_Anagram[m].word_for_anagram,word_Anagram[j].word_for_anagram)>0)
            {
                for(i=0;i<20;i++)
                {
                    word[i]=word_Anagram[j].word_for_anagram[i];
                    word_Anagram[j].word_for_anagram[i]=word_Anagram[j+1].word_for_anagram[i];
                    word_Anagram[j+1].word_for_anagram[i]=word[i];
                    
                }
                z=word_Anagram[j].size_word;
                word_Anagram[j].size_word=word_Anagram[j+1].size_word;
                word_Anagram[j+1].size_word=word_Anagram[j].size_word;
            }
        }
    }
        printf("---------------------------\n");
    for (j=0;j<20;j++)
        printf("%s\n",word_Anagram[j].word_for_anagram);
        
}
прошу помочь и сказать в чем ошибся
0
Catstail
Модератор
24538 / 12454 / 2275
Регистрация: 12.02.2012
Сообщений: 20,220
09.04.2012, 17:17 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Много нвернуто лишнего... В частности:

Присвоить длины строк можно проще:
C++
1
for(j=0;j<20;j++)  word_Anagram[j].size_word=strlen(word_Anagram[j].word_for_Anagram);
И все!

А сортировать по алфавиту проще всего вот так:
C++
1
2
3
4
5
6
7
8
for (i=0; i<19; i++)
    for (j=i+1; j<20; j++)
         if (strcmp(word_Anagram[i].word_for_Anagram,word_Anagram[j].word_for_Anagram)
            {
            strcpy(tmp,word_Anagram[i].word_for_Anagram);
            strcpy(word_Anagram[i].word_for_Anagram,word_Anagram[j].word_for_Anagram);
            strcpy(word_Anagram[j].word_for_Anagram,tmp);
            }
Не забудь добавить в начало описание переменной tmp: char tmp[200];
1
ivsamiylov
1 / 1 / 1
Регистрация: 31.03.2012
Сообщений: 49
09.04.2012, 20:20  [ТС] 6
Спасибо помогли)
только там одно проблема была
C
1
if (strcmp(word_Anagram[i].word_for_Anagram,word_Anagram[j].word_for_Anagram))
так она ищет тока слова равные, т.е. одинаковые
поэтому использовал
C
1
if (strcmp(word_Anagram[i].word_for_Anagram,word_Anagram[j].word_for_Anagram)>0)
0
Catstail
Модератор
24538 / 12454 / 2275
Регистрация: 12.02.2012
Сообщений: 20,220
09.04.2012, 22:33 7
Да, конечно! Это я ошибся, извините!
0
09.04.2012, 22:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 22:33

Как автоматически сортировать строки в Excel?
Есть таблица Необходимо сделать автоматическую сортировку строк по столбцу &quot;Общее&quot; в порядке...

Объясните как удалять, добавлять и сортировать строки
подскажите, пожалуйста,как удалять, добавлять и сортировать строки? мне казалось,что через...

Как сортировать параметр, но с ним сдвигать и остальные строки?
uses crt; const m = 255; type ma4ina = record model: string; pacxod: real; ...


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

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

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