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

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

27.06.2013, 08:33. Просмотров 705. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2013, 08:33
Ответы с готовыми решениями:

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

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

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

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

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

1
Khelleos
39 / 39 / 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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 08:48

Вывести все слова, отличные от последнего слова
Всем привет, задание на работу со строками такое: Вывести все слова, отличные от последнего слова,...

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

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


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

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

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