Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 08.12.2012
Сообщений: 23
1

Объявление массива слов

22.04.2013, 23:30. Показов 801. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть такое задание: в текстовом файле записаны слова через пробел, упорядочить эти слова в алфавитном порядке. Программу я делал до этого на паскале, без массива как я понимаю это задание здесь не выполнить, в связи с этим возник вопрос, как в си объявить массив, элементами которого буду являться слова?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2013, 23:30
Ответы с готовыми решениями:

объявление массива
Можно ли так объявлять массив? Если да, то в чем отличие? ... int b=5; int a; ...

объявление массива
помнится в паскале можно было написать нечто вроде Public Stroka(50) As String Public...

Объявление массива
Есть два файла первый с функцией main() main.cpp #include <iostream> #include <string>...

Объявление массива
Всем добрый день, очень нужна помощь. Вопрос собственно такой: Объявляется объект class...

4
2 / 2 / 1
Регистрация: 20.12.2011
Сообщений: 40
23.04.2013, 00:11 2
C++
1
string[] array_name = new string[n];
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
23.04.2013, 00:26 3
machet1k, это что за язык такой? Си-Диез какой-нибудь, не?

Ar471, при учёте того, что в С нет стандартных саморасширяющихся массивов, прийдётся самому реализовывать или такой массив, или список, или дерево. Последнее реализуется сложнее, за то работает быстрее и интереснее...
0
3 / 3 / 0
Регистрация: 08.12.2012
Сообщений: 23
23.04.2013, 18:44  [ТС] 4
Цитата Сообщение от easybudda Посмотреть сообщение
machet1k, это что за язык такой? Си-Диез какой-нибудь, не?

Ar471, при учёте того, что в С нет стандартных саморасширяющихся массивов, прийдётся самому реализовывать или такой массив, или список, или дерево. Последнее реализуется сложнее, за то работает быстрее и интереснее...
А как реализовать такой массив?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
23.04.2013, 19:47 5
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
 
typedef struct NODE {
    char * word;
    size_t count;
    struct NODE * left;
    struct NODE * right;
} node_t;
 
int add_word(node_t ** pTree, const char * word) {
    if ( ! *pTree ) {
        if ( ! ( *pTree = malloc(sizeof(node_t)) ) )
            return -1;
        if ( ! ( (*pTree)->word = malloc(strlen(word) + 1) ) ) {
            free(*pTree);
            return -1;
        }
        strcpy((*pTree)->word, word);
        (*pTree)->count = 1;
        (*pTree)->left = (*pTree)->right = NULL;
        
        return 0;
    }
    else {
        int d = strcmp((*pTree)->word, word);
        if ( d == 0 ) {
            (*pTree)->count += 1;
            return 0;
        }
        else
            return add_word( ( d > 0 ) ? &((*pTree)->left) : &((*pTree)->right), word);
    }
}
 
void del_tree(node_t ** pTree) {
    if ( *pTree ) {
        del_tree(&((*pTree)->left));
        del_tree(&((*pTree)->right));
        free((*pTree)->word);
        free(*pTree);
        *pTree = NULL;
    }
}
 
void dump_tree(const node_t * tree, FILE * outstream) {
    if ( tree ) {
        size_t i;
        
        dump_tree(tree->left, outstream);
        
        for ( i = 0; i < tree->count; ++i )
            assert ( fprintf(outstream, "%s ", tree->word) > 0 );
        
        dump_tree(tree->right, outstream);
    }
}
 
#define MAX_WORD_LEN (256)
#define GET_WORD(w, f) ( fscanf((f), "%255s", (w)) == 1 )
#define INPUT_FILE_NAME "unsorted.txt"
#define OUTPUT_FILE_NAME "sorted.txt"
 
int main(void) {
    char word[MAX_WORD_LEN];
    FILE * file;
    node_t * tree;
    
    if ( ! ( file = fopen(INPUT_FILE_NAME, "r") ) ) {
        perror("fopen");
        exit(1);
    }
    
    while ( GET_WORD(word, file) ) {
        if ( add_word(&tree, word) ) {
            fprintf(stderr, "Memory error!\n");
            del_tree(&tree);
            if ( fclose(file) )
                perror("fclose");
            exit(1);
        }
    }
    
    if ( ferror(file) || fclose(file) ) {
        fprintf(stderr, "Somewhat wrong with input file!\n");
        del_tree(&tree);
        exit(1);
    }
    
    if ( ! tree ) {
        fprintf(stderr, "Can't find any words in input file!\n");
        exit(1);
    }
    
    if ( ! ( file = fopen(OUTPUT_FILE_NAME, "w") ) ) {
        perror("fopen");
        del_tree(&tree);
        exit(1);
    }
    
    dump_tree(tree, file);
    del_tree(&tree);
    
    if ( fclose(file) ) {
        perror("fclose");
        exit(1);
    }
    
    fprintf(stderr, "See sorted words in %s\n", OUTPUT_FILE_NAME);
    
    exit(0);
}
А с массивом я не умею...
1
23.04.2013, 19:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2013, 19:47
Помогаю со студенческими работами здесь

объявление массива
int N = 10; int mas = {5,8,2,0,6,3,8,2,7,9}; По чему так нельзя, подчеркивает masN]?

Объявление массива
Как объявить массив следующего типа: A d] т.е. массив A, в котором N элементов (индекс i),...

Объявление массива
Всем привет! Я знаю следующие способы объявить массив //Статический int a; //Динамический...

с C# в C++, объявление массива
Добрый вечер, Всем! =) Пытаюсь перевести ф-цию с C# в VS C++ Есть функция на C# int M_SLED()...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru