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

Напечатать в алфавитном порядке все буквы, входящие в текст

26.04.2015, 18:10. Показов 1611. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Весь текст находится в txt файле, все данные должны быть обработаны и занесены в алфавитном порядке в выходной текст, а так же отобразиться на экране. При этом пользователь должен ввести название входного и выходного файлов.
P.S. До этого делал это же задание с немного отличными требованиями в паскале на PascalABC.NET, теперь вот на С первую же программу такую дали

Добавлено через 5 часов 27 минут
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <ctype.h>
 
int main(void)
{
    int i,j,k,TextSize;
    char InPName[15],OutPName[15], Symbol;
    FILE *InPutFile,*OutPutFile;
    char OurText[100];
 
    setlocale(LC_ALL, "RUSSIAN");
    printf("Данная программа отсортирует ваш текст в алфавитном порядке.\n");
    printf("Введите имя исходного файла \n");
    k = 0;
    while (k == 0)
    {
        scanf("%s", InPName);
 
        if ((InPutFile = fopen(InPName, "r")) == NULL)
        {
            printf("Ошибка при открытии файла. Повторите ввод\n");
            k = 0;
        }
        else{
            k = 1;
        }
    }
    printf("Введите имя файла для результата \n");
    scanf("%s", OutPName);
    OutPutFile = fopen(OutPName, "w");
    fseek(InPutFile, 0, SEEK_SET);
    printf("Исходныйтекст: \n \r");
    TextSize = 0;
    while (!feof(InPutFile))
    {   
        Symbol = getc(InPutFile);
        printf("%c", Symbol);
        TextSize++;
        OurText[TextSize] = toupper(Symbol);
    }
 
    fclose(InPutFile);
    for (i = 0; i <= TextSize; i++)
    {
        Symbol = OurText[i];
        j = i - 1;
        while ((j >= 1) && (OurText[j] > Symbol))
        {
            OurText[j + 1] = OurText[j];
            j --;
        }
        OurText[j + 1] = Symbol;
    }
    printf("\n");
    printf("Получившийся текст: \n \r");
    for (i = 0; i <= TextSize; i++)
    {
        switch (OurText[i])
        {
        case 'A' - 'Z' || 'А' - 'Я':
            printf("%c", OurText[i]);
            putc(OurText[i], OutPutFile);
        }
    }
 
    fclose(OutPutFile);
    system("pause");
    return 0;
}
Может кто объяснить, почему switch не хочет пропускать символы? Без него все работает, но выводит в добавок и те символы, которые мне не нужны. К тому же в конце текста откуда-то появляется буква "я".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2015, 18:10
Ответы с готовыми решениями:

В алфавитном порядке порядке напечатать (по одному разу) все строчные русские буквы, входящие в заданный текст
С ( Си ) Вводится текст, за которым следует точка. В алфавитном порядке порядке напечатать ( по...

В алфавитном порядке напечатать (по разу) все строчные русские буквы, входящие в текст
Вводится текст, за которым следует точка. В алфавитном порядке напечатать (по разу) все строчные...

В алфавитном порядке напечатать (по одному разу) все строчные русские буквы, входящие в заданный текст
Подскажите ошибку, которую допустила в программе. Задание такое: Вводится текст, за которым...

Напечатать в алфавитном порядке все различные строчные русские буквы, входящие в заданный текст из 200 литер.
Напечатать в алфавитном порядке все различные строчные русские буквы, входящие в заданный текст из...

8
Эксперт .NET
5872 / 4749 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
26.04.2015, 18:25 2
Цитата Сообщение от Student7196 Посмотреть сообщение
C++
1
2
3
4
5
6
switch (OurText[i])
 {
case 'A' - 'Z' || 'А' - 'Я':
 printf("%c", OurText[i]);
 putc(OurText[i], OutPutFile);
 }
А какое назначение этой конструкции? Вернее, почему Switch?
0
34 / 44 / 9
Регистрация: 14.03.2015
Сообщений: 134
26.04.2015, 18:27 3
Цитата Сообщение от Student7196 Посмотреть сообщение
почему switch не хочет пропускать символы?
потому что их там нет, пройди программу пошагово и посмотри
0
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 52
26.04.2015, 18:40  [ТС] 4
я хотел, чтобы действия производились только над русскими и английскими буквами
0
34 / 44 / 9
Регистрация: 14.03.2015
Сообщений: 134
26.04.2015, 18:42 5
Лучший ответ Сообщение было отмечено Student7196 как решение

Решение

замени
C++
1
2
3
4
5
6
switch (OurText[i])
        {
        case 'A' - 'Z' || 'А' - 'Я':
            printf("%c", OurText[i]);
            putc(OurText[i], OutPutFile);
        }
на
C++
1
2
3
4
5
6
7
8
9
10
    if(OurText[i]>='A'&OurText[i]<='Z')
        {
            printf("%c", OurText[i]);
            putc(OurText[i], OutPutFile);
        }
        if(OurText[i]>='А'&OurText[i]<='Я')
        {
            printf("%c", OurText[i]);
            putc(OurText[i], OutPutFile);
        }
Добавлено через 59 секунд
а лишняя я в конце это ты на один символ больше из файла читаешь
1
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 52
26.04.2015, 18:44  [ТС] 6
Что значит их там нет? Если в исходном файле их ввести, то они запишутся в массив. Еще раз повторю, без switch на экран выводится отсортированная последовательность символов, но меня интересуют только буквы.
0
Эксперт .NET
5872 / 4749 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
26.04.2015, 18:49 7
Используйте if
0
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 52
26.04.2015, 18:50  [ТС] 8
Super__Enot, с вашим кодом все заработало, спасибо!
0
34 / 44 / 9
Регистрация: 14.03.2015
Сообщений: 134
26.04.2015, 18:52 9
Цитата Сообщение от Student7196 Посмотреть сообщение
uper__Enot, с вашим кодом все заработало, спасибо!
не за что =) просто switch так ни кто не использует
0
26.04.2015, 18:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2015, 18:52
Помогаю со студенческими работами здесь

В алфавитном порядке напечатать буквы, имеющие наибольшее количество вхождений в текст
Строка содержит буквы и пробелы. В алфавитном порядке напечатать буквы, имеющие наибольшее...

Напечатать в алфавитном порядке все буквы входящие в текст
Будьте добры :C Задан текст из латинских строчных букв, за которым следует точка. Напечатать в...

Напечатать в алфавитном порядке все согласные буквы, входящие в текст.
8.2.2. Помогите, пожалуйста, решить задачу в С++. Напечатать в алфавитном порядке все...

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


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

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