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

Создать новый файл, содержащий все слова, отличные от последнего слова

27.06.2013, 08:33. Просмотров 683. Ответов 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
#include <string.h>
#include<stdio.h>
 
int main()
{
 FILE* fin = fopen("1.txt", "r"); // открываем файл для чтения
  
 fseek(fin, 0, SEEK_END); // курсор в конце файла
 
 if (fin == 0) printf("Error!\n");
 else
 {
     char ch;
     int i = 2;   
     while (true) // находим начало последнего слова
     {
            fseek(fin, -i, SEEK_CUR); 
            
            ch = fgetc(fin);// читаем символ в позиции курсора
            if (ch == ' ')  break; // если пробел
     }
 
        char word[30];
        fscanf(fin, "%s", word); // читаем последнее слово
        word[strlen(word) - 1] = ','; // заменяем точку на запятую
        
        clearerr(fin);
        fseek(fin, 0, SEEK_SET); // курсор в начало
        
        FILE* fout = fopen("2.txt", "w"); // открываем файл для записи
 
        char str[30];
        while(true)
        {
            fscanf(fin, "%s", str); // читаем слова
            
            if (feof(fin)) break;   // если последнее слово считано, то выход
            if (strcmp(str, word))  // если слово не равно последнему, то записываем в файл
            {
                fputs(str, fout);
                fputc(' ', fout);
            }
        }
        fseek(fout, -2, SEEK_CUR);
        fputc('.', fout);
 }
     
 getchar();
 return 0;
}
Программа работает, но выдает неправильный результат. Помогите пожалуйста разобраться!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2013, 08:33
Ответы с готовыми решениями:

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

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

Напечатать все слова последовательности, отличные от последнего слова, предварительно преобразовав по правилу
последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных русских...

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

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

1
Khelleos
38 / 38 / 25
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
27.06.2013, 08:48 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
53
54
55
#include <string.h>
#include<stdio.h>
 
int main()
{
    FILE* fin = fopen("1.txt", "r"); // открываем файл для чтения
  
    if (fin == 0) 
    {
        printf("Error: cant open file for read!\n");
        return -1;
    }
 
    fseek(fin, 0, SEEK_END); // курсор в конце файла
 
    char ch;
    int i = 2;   
    while (true) // находим начало последнего слова
    {
        fseek(fin, -i, SEEK_CUR); 
            
        ch = fgetc(fin);// читаем символ в позиции курсора
        if (ch == ' ')  break; // если пробел
    }
 
    char word[30];
    fscanf(fin, "%s", word); // читаем последнее слово
    
    word[strlen(word) - 1] = '\0'; // заменяем точку на запятую
        
    clearerr(fin);
    fseek(fin, 0, SEEK_SET); // курсор в начало
        
    FILE* fout = fopen("2.txt", "w"); // открываем файл для записи
 
    char str[30];
    while(true)
    {
        fscanf(fin, "%s", str); // читаем слова
        if(str[strlen(str) - 1] == ',')
            str[strlen(str) - 1] = '\0';
            
        if (feof(fin)) break;   // если последнее слово считано, то выход
        if (strcmp(str, word))  // если слово не равно последнему, то записываем в файл
        {
            fputs(str, fout);
            fputc(' ', fout);
        }
    }
    fseek(fout, -1, SEEK_END);
    fputc('.', fout);
     
    getchar();
    return 0;
}
Вместо запятой для последнего слова ставлю символ \0.
В цикле while после считывания добавил проверку, что если в конце запятая, то заменить её на \0.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 08:48

Напечатать все слова, отличные от последнего слова
Дан текст. Между соседними словами – не менее одного пробела, за последним словом - точка....

Написать все слова, отличные от последнего слова
Дан текст, содержит от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними...

Напечатать все слова, отличные от последнего слова
Задание звучит так :Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2...


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

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

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