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

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

03.07.2014, 14:33. Просмотров 1023. Ответов 3
Метки нет (Все метки)

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

имя_программы [опции] [исходный_файл [результирующий_файл]]

Опции – последовательность ключей, настраивающих поведение программы. Опции являются необязательными и могут быть не указаны среди аргументов. Опции также не являются взаимоисключающими.
Исходный_файл – путь к файлу, из которого нужно считывать информацию. Если не задан, то строки исходного текста программа должна читать из стандартного потока ввода.
Результирующий_файл – путь к файлу, в который нужно вывести результаты преобразования. Задаётся только вместе с исходным_файлом. Если не задан, результат преобразований записывается в стандартный поток вывода. Может совпадать с исходным_файлом.

Опции следующие:
-b=M и -e=N - программа выполняет действия со строки M и до строки N (включительно) соответственно. Если опции не указаны, то программа выполняет действие с первой (для b) и до последней (для e) строки исходного текста.
-a - меняет порядок букв в каждом слове текста на обратный. Слово в данном случае - последовательность символов, не содержащая пробел.
-w - меняет порядок следования слов в строках на обратный.
-s - меняет порядок строк в файле на обратный.

Вот мой код:
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#include"stdafx.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include <sstream>
#include<wchar.h>
using namespace std;
int opts[5] = { 0, 0, 0, 0, 0 };
char* files[2];
char* f_name[2];
int i;
void getopt2(int argc, char* argv[])
{
    for (i = 1; i < argc; i++)
    {
        for (int l = 0; l < argc / i; l++)
        {
            if ((argv[i][l] == '-') && (argv[i][l + 1] == 'b') && (argv[i][l + 2] == '='))
            {
                argv[i][l] = ' '; argv[i][l + 1] = ' '; argv[i][l + 2] = ' ';
                opts[0] = atoi(argv[i]);
                if (opts[0] <= 0)
                {
                    opts[0] = 0;
                }
                continue;
            }
            else
            {
                opts[0] = 1;
                continue;
            }
            if ((argv[i][l] == '-') && (argv[i][l + 1] == 'e') && (argv[i][l + 2] == '='))
            {
                argv[i][l] = ' '; argv[i][l + 1] = ' '; argv[i][l + 2] = ' ';
                opts[1] = atoi(argv[i]);
                if (opts[1] > argc)
                {
                    opts[1] = argc;
                }
                continue;
            }
            else
            {
                opts[1] = argc - 1;
                continue;
            }
            if ((argv[i][l] == '-') && (argv[i][l + 1] == 'a'))
            {
                opts[2] = 1;
                continue;
            }
            if ((argv[i][l] == '-') && (argv[i][l + 1] == 'w'))
            {
                opts[3] = 1;
                continue;
            }
            if ((argv[i][l] == '-') && (argv[i][l + 1] == 's'))
            {
                opts[4] = 1;
                continue;
            }
            if ((argv[i][l - 1] == '[') && (argv[i][l] != ']'))
            {
                int v = l;
                int fi1 = 1;
                for (l = v; l < v + 30; l++)
                {
                    while ((argv[i][l] != ']') && (argv[i][l] != '['))
                    {
                        for (l = v; l < v + 30; l++)
                        {
                            ;
                            scanf("%s", f_name[0]);
                            if (argv[i][l] == ']')
                            {
                                int fi2 = 0;
                                continue;
                            }
                            if (argv[i][l] == '[')
                            {
                                while (argv[i][l] != ']')
                                {
                                    int fi2 = 1;
                                    scanf("%s", files[1]);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
void process()
{
    FILE *f1, *f2;
    f1 = fopen(files[0], "r");
    f2 = fopen(files[1], "w");
    char* buf1[20]; char* buf2[20]; char* buf3[20]; char* buf4[20];
    for (i = 0; i<20; i++)
    {
        fgets(buf1[i], 255, f1);    //открыть файл, прочесть ввод
        if (feof(f1))               //если кончится файл
        {
            strcat(buf1[i], "\n");     //записть в buf1[i] построчно
            break;
        }
    }
    int s = i;
    if (opts[4] == 1)
    {
        for (i = 0; i < s + 1; i++)
            buf2[i] = buf1[s - i];
    }
    else for (i = 0; i<s + 1; i++) buf2[i] = buf1[i];
    if (opts[3] == 1)
    {
        string str, outstr;
        while (scanf("%s", str))
            outstr = str + ' ' + outstr;
        printf("%s", outstr);
    }
    else for (i = 0; i<s + 1; i++) buf3[i] = buf2[i];
    if (opts[2] == 1)                                           //Функция для обратного порядка букв в словах
    {
        for (i = 0; i<s + 1; i++)
        {
            char* slova[10];                                // берём слова...
            char* sd[10];
            int n = 0, in = 0;
            for (int j = 0; j<strlen(buf3[i]); j++)          //...построчно...
            {
                slova[n][in] = buf3[i][j]; sd[n][in] = buf3[i][j];
                if (buf2[i][j] == ' ')                                 //...каждое слово...
                {
                    for (int k = 0; k < in; k++)
                    {
                        slova[n][k] = sd[n][in - k];           //...переворачиваем.
                    }
                    n++; in = 0;
                }
                in++;
            }
            for (int j = 0; j<n; j++) strcat(buf4[i], slova[j]);
        }
    }
    else for (i = 0; i<s + 1; i++) buf4[i] = buf3[i];
    for (i = 0; i<s + 1; i++) fputs(buf4[i], f2);        //Записываем результат в файл вывода
    fclose(f1); fclose(f2);
}
int main(int argc, char* argv[])
{
    system("cls");
    FILE *f1, *f2;
    int fi1, fi2;
    char* files[2];
    int i;
    char* arguments;
    printf("%s\n", "Your arguments?");
    scanf( "%s\n",arguments);
    argv[1] = arguments;
    getopt2(argc, argv);
    for (int i = 0; i < 5; i++) 
    { 
        printf("%s\n", opts[i], "%s\n", " ", "%s\n", argv[i + 1]);
    }
    if ((fi1 == 0) && (fi2 == 0) && (opts[2] == 0) && (opts[3] == 0) && (opts[4] == 0))
    {
        printf("%s\n", "Error: Invalid arguments");
    }
    if ((fi1 == 0) && (fi2 == 0) && ((opts[2] == 1) || (opts[3] == 1) || (opts[4] == 1)))
    {
        printf("%s\n", "Enter your text");
        scanf("%s", files[0]);
    }
    if (((fi1 == 1) || (fi2 == 1)) && (opts[2] == 0) && (opts[3] == 0) && (opts[4] == 0))
    {
        if ((fi1 == 1) && (fi2 == 0))
        {
            process();
            printf("%s\n", f2);
        }
        if ((fi1 == 1) && (fi2 == 1))
        {
            process();
        }
        if ((fi1 == 0) && (fi2 == 1))
        {
            scanf("%s", files[0]);
        }
    }
    if (((fi1 == 1) && (fi2 == 0)) && ((opts[2] == 1) || (opts[3] == 1) || (opts[4] == 1)))
    {
        process();
    }
    getch();
}
Думаю, проблема возникает на этапе ввода данных и в самой функции getopt2.

Это мой первый пост.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 14:33
Ответы с готовыми решениями:

Написать программу, которая получает со стандартного потока ввода права доступа к файлам каталога
Очень срочно нужно написать данную программу. Буду очень признателен и благодарен... 1....

Ввод слова со стандартного потока ввода
Разработайте программу, которая вводит со стандартного потока ввода числа и помещает их в список...

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

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

написать программу на С #,которая шифрует или расшифровывает текстовой файл
Задание :написать программу которая шифрует или расшифровывает текстовой файл длины не менее 32 ...

3
henb
03.07.2014, 14:51
  #2

Не по теме:

Ошиблись темой? или просто пишите на C&C++ в Visual Studio?

0
Evgenyrudne
0 / 0 / 0
Регистрация: 02.07.2014
Сообщений: 3
03.07.2014, 18:05  [ТС] 3
Пишу в Visual Studio

Добавлено через 39 секунд
Но программу надо через стандартную библиотеку Си.

Добавлено через 2 часа 31 минуту
Бьюсь над ней уже долго.
Пожалуйста, помогите.
0
Evgenyrudne
0 / 0 / 0
Регистрация: 02.07.2014
Сообщений: 3
04.07.2014, 19:09  [ТС] 4
Можете как-то программу подправить, чтобы работала нормально?
После моих исправлений выдаёт либо ошибку "System.AccessViolationExсeption", либо отсутствие аргументов.
0
04.07.2014, 19:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2014, 19:09

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

Как перенаправить в find текст из файла или со стандартного ввода (клавиатуры)
Неделю мучаюсь примера нет, простую команду- пожалуйста сделаю, но вот с составной...........

Считывание из стандартного потока ввода
Доброго времени суток . Столкнулся вот с такой проблемой . Есть функция , которая считывает со...


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

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

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