Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
FantazerMasha
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 51
#1

Подсчитать количество предложений в исходном файле и записать в файл-результат - C (СИ)

19.06.2016, 09:35. Просмотров 171. Ответов 1
Метки нет (Все метки)

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


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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
int sent_count(FILE * file);
 
#define SIZE 256
 
int main(int argc, char* argv[]) {
if (argc < 3) {
printf("Ошибка ввода\n");
exit(EXIT_FAILURE);
}
 
char * result_filename = argv[argc - 1];
FILE *out = fopen(result_filename, "w");
if (out == NULL)
{
printf("Ошибка ввода\n");
perror(result_filename);
}
 
for (int i = 1; i < argc-1; i++) {
FILE *in = fopen(argv[i], "r");
if (in == NULL)
{
printf("Ошибка ввода\n");
perror(argv[i]);
} else {
int count = sent_count(in);
fprintf(out, "%s : %d\n", argv[i], count);
}
fclose(in);
}
 
fclose(out);
return 0;
}
 
int sent_count(FILE * file) {
char buffer[SIZE];
int count = 0;
char sign;
int size;
while (feof(file) == 0){
size = fread(buffer, sizeof(char), SIZE, file);
if (ferror(file)) {
printf("Error Reading to myfile.txt\n");
exit(EXIT_FAILURE);
}
 
if (size == 0) {
printf("Файл пустой!");
return 0;
} else {
for (int i = 0; i < size; i++) {
if (ispunct(buffer[i]))
{
if (sign != '\0')
{
count++;
sign = '\0';
}
}
else sign = buffer[i];
}
}
}
return count;
}
Пример работы:
Имеем в директории файл win1.txt, в нём тест, в общем в нём 5 предложений.
И поехали:
./a.out win1.txt win2.txt
В директории создастся файл с именем "win2.txt" и в него запишется:
win1.txt : 5
Имеются ошибки, которые ломают мне голову, помогите исправить, пожалуйста.
Довольно интересное задание)
0
Миниатюры
Подсчитать количество предложений в исходном файле и записать в файл-результат  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2016, 09:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчитать количество предложений в исходном файле и записать в файл-результат (C (СИ)):

Подсчитать количество предложений и записать в файл - C (СИ)
Пользователь задаёт при запуске файл с текстом и название файла, куда следует записать результат. Для файла подсчитать количество...

Подсчитать количество символов во введенном файле и вывести результат на экран - C (СИ)
программа считает колво символов в введенноим файле и выводи это колво на экран помогите исравить допустим 30 символов в файле 3 строки...

Подсчитать количество вхождений заданной буквы в исходном тексте - C (СИ)
Добрый день друзья , помогите решить в С маленькую задачку. Подсчитать кол-во букв А в предложении и общее кол-во букв. В тексте несколько...

Посчитать количество предложений в файле - C (СИ)
Посчитать количество предложений в файле. В чем ошибка не понимаю. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;dos.h&gt; main()...

Заменить все слова в исходном файле на количество букв (целое число) в слове - C (СИ)
Заменить все слова в исходном файле на количество букв (целое число) в сло- ве. Результат записать в отдельный файл. Записывать числа...

Подсчитать выражение и результат записать в десятичной системе счисления - C (СИ)
007 + 7 0xA * 0x10 1.3E-3 * 20 7 / 3 7. / 3 Прошу объяснить!

1
Геомеханик
746 / 552 / 383
Регистрация: 26.06.2015
Сообщений: 1,305
23.06.2016, 07:11 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <stdio.h>
#include <errno.h>
#define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
#define is_endp(c)  ((c) == '.' || (c) == '!'  || (c) == '?')
 
//кол-во предложений в файле
int count_ps(const char* _output, const char* _input){
    int      e;
    char     s[256], *p;
    FILE*    fp;
    unsigned n, i;
 
    if((fp = fopen(_input, "r")) == NULL)
        return errno;
 
    e = 0;
    n = i = 0;
    while(((p = fgets(s, 256, fp)) != NULL) && ((e = ferror(fp)) == 0)){
        for(; *p; ++p){
            if(is_endp(*p)){
                if(i){
                    ++n;
                    i = 0;
                }
            } else if(! is_space(*p))
                i = 1;
        }
    }
 
    if((e = ferror(fp)) != 0){
        fclose(fp);
        return e;
    }
 
    if((fp = freopen(_output, "w", fp)) == NULL)
        return errno;
 
    if(fprintf(fp, "%s : %u", _input, n + i) <= 0)
        e = ferror(fp);
    fclose(fp);
    return e;
}
 
int main(void){
    char _input[]  = "win1.txt";
    char _output[] = "win2.txt";
 
    int err = count_ps(_output, _input);
    if(err != 0)
        printf("error, code: %d\n", err);
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2016, 07:11
Привет! Вот еще темы с ответами:

Нужно записать результат в *.txt файл - C (СИ)
Я написал такой код у меня создается файл result.txt , но он пуст, может проблема в том, что я сделал файл только для записи, помогите,...

Прочитать из файла, отсортировать и записать результат в файл - C (СИ)
Необходимо прочитать числа из файла как список, провести сортировку (по убыванию и возрастанию) и вывести в файл. Прошу помочь с...

Подсчитать количество запятых в файле - C (СИ)
#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;time.h&gt; ...

Подсчитать количество слов в файле - C (СИ)
Задачка вот такая, нужна помощь с ее решением) Один из способов идентификации автора литературного произведения – подсчет частоты...


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

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

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