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

Записать каждое слово в отдельный элемент массива

26.12.2014, 15:25. Показов 2434. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нужна помощь, выручайте.
Написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент массива. Вывести на экран а) пять самых коротких слов, б) повторяющиеся слова в алфавитном порядке

Из файла программа считывает текст, на экран выводит. Но пункты а) и б) она не выполняет, не выводит ничего. Case 3 вроде ошибка, но какая, мы не видим. Выручите.



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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include"stdafx.h"
#include<stdio.h>
#include<clocale>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<Windows.h>
#include"iostream"
using namespace std;
 
struct Words
{
    char slovo[255];
    char slovo2[255];
};
 
void printauto(Words* t)
{
    printf("%s\n", t -> slovo);
}
 
int main(int argc, _TCHAR* argv[])
{
    int i = 0;
    int min2 = 0;
    int min3 = 0;
    int min4 = 0;
    int min5 = 0;
    FILE *in = NULL;
    int num = 0;
    char menu;
    char *str;
    str = new char[10];
    //char *n = new char[1];
    int *a = NULL;
    char *m;
    m = new char[10];
    char filename[15];
    Words *group = NULL;
    int k = 0;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
    do
    {
        printf("\n ***********************\n 1 - загрузка данных из файла\n 2 - вывод текста на экран\n 3 - вывод результата\n 0 - выход\n ***********************\n");
        menu = getchar();
        switch(menu)
        {
            case'1':
            {
                do
                {
                    printf ( "%s", "Введите имя файла: ");
                    scanf("%s", filename);
                    in = fopen(filename, "r");
                    if (NULL == in)
                    {
                        printf("ОШИБКА! Не удалось найти файл!\n");
                    };
                }
                while ( NULL == in);
            break;
            }
            case'2':
                {
                    while(!feof(in))
                    {
                        fgetc(in);
                        i++;
                    }
                    group = new Words[1024];
                    a = new int[1024];
                    rewind(in);
                    while(!feof(in))
                    {
                        fscanf(in, "%s", group[i].slovo);
                        printf("%s ", group[i].slovo);
                        a[i] = strlen(group[i].slovo);
                        printf("%d\n", a[i]);
                        i++;
                    }
                    break;
                }
                case'3':
                {
                    printf("Пять самых коротких слов:\n");
                    int min = 0;
                    for (num = 0; num < i; num ++)
                    {
                        if(a[num] < a[min])
                        {
                            min = num;
                        };
                    }
                    printf("%s\n", group[min].slovo);
                    for (num = 0; num<i; num++)
                    {
                        if (num != min)
                        {
                            if(a[num] < a[min2])
                            {
                                min2 = num;
                            }
                        }
                    }
                    printf("%s\n", group[min2].slovo);
                    for (num = 0; num<i; num++)
                    {
                        if (num != min && num != min2)
                        {
                            if(a[num] < a[min3])
                            {
                                min3 = num;
                            };
                        };
                    }
                    printf("%s\n", group[min2].slovo);
                    for (num = 0; num<i; num++)
                    {
                        if (num!=min && num!=min2 && num!=min3)
                        {
                            if(a[num]<a[min4])
                            {
                                min4 = num;
                            };
                        };
                    }
                    printf("%s\n", group[min4].slovo);
                    for (num = 0; num<i; num++)
                    {
                        if (num!=min && num!=min2 && num!=min3 && num!=min4)
                        {
                            if(a[num]<a[min5])
                            {
                                min5 = num;
                            };
                        };
                    }
                    printf("%s\n", group[min5].slovo);
                    printf("\n\nПовторяющиеся слова в алфавитном порядке:\n");
                for(int a = 0; a < i; a++)
                    {
                        for(int b = i - 1; b > a; b--)
                         {
                            if (strcmp(group[a].slovo, group[b].slovo) == 0)
                             {
                                 strcpy(group[k].slovo2, group[a].slovo);
                                 k++;
                             };
                         }
                     }
                    int y = 0;
                    for (int a = 0; a < k; a++)
                     {
                        for (int n = k - 1; n > a; n--)
                        {
                            if (strcmp (group[a].slovo2, group[n].slovo2)>0)
                            {
                                strcpy(&m[y], group[a].slovo2);
                                strcpy(group[a].slovo2, group[n].slovo2);
                                strcpy(group[n].slovo2, &m[y]);
                                y++;
                                    
                            };
                        }
                     }
                    for (int a = 0; a < k; a++)
                    {
                        printf("\n", group[a].slovo2);
                    }
                    break;
                }
        }
    }
    while (menu != '0');
    delete []str;
    fclose(in);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2014, 15:25
Ответы с готовыми решениями:

Реализовать функцию Split, которая бы мне заносила каждое слово в отдельный элемент массива
Хотел реализовать функцию Split, которая бы мне заносила каждое слово в отдельный элемент массива....

Написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент массива
Написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент...

Написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент массива.
Помогите мне решить эту задачу: Написать программу, которая считывает текст из файла и записывает...

Написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент массива
Нужна помощи. Можно ли дать подобие самой элементарной задачи: Написать программу, которая...

3
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
26.12.2014, 15:35 2
Почему ты не воспользуешься отладчиком?
0
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 7
26.12.2014, 16:19  [ТС] 3
Так все работает по сути же. Он только не выводит обработанный текст почему-то. Отладчик ошибок не видит.
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
26.12.2014, 18:12 4
Цитата Сообщение от Diversant321 Посмотреть сообщение
Вывести на экран а) пять самых коротких слов, б) повторяющиеся слова в алфавитном порядке
Diversant321,
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct Word {
    char data[256];
    unsigned length;
};
 
int compareByLen(const void *p1, const void *p2) {
    const struct Word *w1 = (const struct Word *) p1;
    const struct Word *w2 = (const struct Word *) p2;
    return (w1->length < w2->length ? -1 :
            w1->length > w2->length ?  1 : 0);
}
 
int compareByAlpha(const void *p1, const void *p2) {
    const struct Word *w1 = (const struct Word *) p1;
    const struct Word *w2 = (const struct Word *) p2;
    return strcmp(w1->data, w2->data);
}
 
int main() {
    unsigned i, j, repeated;
    struct Word words[] = {
        { "abc",    3 },
        { "xyz",    3 },
        { "123456", 6 },
        { "123",    3 },
        { "xyz",    3 },
        { "1",      1 },
        { "zzzz",   4 },
        { "123",    3 },
        { "123456", 6 },
    };
    unsigned words_count = sizeof(words) / sizeof(*words);
 
    printf("five shortest words: \n");
    qsort(words, words_count, sizeof(struct Word), compareByLen);
    for (i = 0; i < (5 < words_count ? 5 : words_count); ++i) {
        puts(words[i].data);
    }
 
    printf("repeated words: \n");
    qsort(words, words_count, sizeof(struct Word), compareByAlpha);
    i = 0;
    while (i < words_count - 1) {
        j = i + 1;
        repeated = 0;
        while (j < words_count &&
               words[j].length == words[i].length &&
               strcmp(words[j].data, words[i].data) == 0) {
            ++j;
            ++repeated;
        }
        if (repeated) {
            puts(words[i].data);
            i = j;
        } else {
            ++i;
        }
    }
    system("pause");
    return 0;
}
0
26.12.2014, 18:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2014, 18:12
Помогаю со студенческими работами здесь

Выделить слова из текста и каждое слово записать в соответствующий элемент массива
Задача: &quot;Дана строка. Считаем ее отрывком текста. Группы символов, разделенных одним или...

Записать каждый отдельный элемент массива в отдельный textbox
Привет всем! Есть массив x(i). Как записать каждый его отдельный элемент, в отдельный textbox?

Разбить на слоги каждое четное слово в строке, а каждое нечетное записать в обратном порядке
Нужно разбить на слога каждое слово на парной позиции в строчке,а каждое на непарной позиции...

Записать все двоичные числа по порядку каждую цифру в отдельный элемент массива
Дано число p - количество знаков в двоичном числе Нужно записать все двоичные числа по порядку ...


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

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