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

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

08.03.2013, 13:55. Просмотров 1050. Ответов 12
Метки нет (Все метки)

Дан текстовый файл, содержащий последовательность слов. Между соседними словами – запятая, за последним словом – точка. Создать новый файл, содержащий все слова, отличные от последнего слова
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2013, 13:55
Ответы с готовыми решениями:

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

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

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

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

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

12
Кудаив
413 / 412 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
08.03.2013, 14:06 2
считываешь из файла в вектор string, разделитель понятное дело запятая, последнее слово отличаешь по идущей за словом точке, потом сравниваешь каждую ячейку вектора с этим последним словом, совпавшие удаляешь. Потом выводишь в новый файл через запятую, в конце ставишь точку...
0
Александр26
0 / 0 / 1
Регистрация: 25.09.2012
Сообщений: 96
08.03.2013, 14:30  [ТС] 3
Цитата Сообщение от Кудаив Посмотреть сообщение
считываешь из файла в вектор string, разделитель понятное дело запятая, последнее слово отличаешь по идущей за словом точке, потом сравниваешь каждую ячейку вектора с этим последним словом, совпавшие удаляешь. Потом выводишь в новый файл через запятую, в конце ставишь точку...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<string.h>
FILE *fin, *fout;
int main(void)
{
    int i, n;
    puts("vvedite predl");
    scanf("%d", &n);
    fin=fopen("files.txt", "rt");
    if(fin==NULL)
    {
                 puts("ERROR");
                 return 1;
    }
    fout=fopen("files_o.txt", "wt");
    if(fout==NULL)
    {
                  puts("ERROR fout");
                  return 2;
    }
а как дальше, что-то вообще не пойму...
0
alsav22
5461 / 4856 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.03.2013, 15:19 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
 
int main()
{
 fstream fin("1.txt", ios::in | ios::ate | ios::binary); // открываем файл для бинарного чтения, курсор в конце файла
 
 if (!fin.is_open()) cout << "Error!" << endl;
 else
 {
     char ch;
        
     while (true) // находим начало последнего слова
     {
            fin.seekg(-1, ios::cur); // курсор на одну позицию назад
            
            ch = fin.peek();  // смотрим символ в позиции курсора
            if (ch == ' ') //  если пробел
            {
                fin.seekg(1, ios::cur); // на начало последнего слова
                break;
            }
        }
 
        string word;
        fin >> word; // читаем последнее слово
        
        word[word.size() - 1] = ','; // заменяем точку на запятую
        
        fin.clear();
        fin.seekg(0); // курсор в начало
        
        ofstream fout("2.txt"); // открываем файл для записи
 
        string str;
        while(true)
        {
            fin >> str; // читаем слова
            
            if (fin.eof()) break;   // если последнее слово считано, то выход
            if (str != word)        // если слово не равно последнему, то записываем в файл
                fout << str << ' ';
        }
        fout.seekp(-2, ios::cur);
        fout << '.';
 }
     
 system("pause");
 return 0;
}
0
08.03.2013, 15:19
Кудаив
413 / 412 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
08.03.2013, 15:24 5
alsav22, да ему похоже Си реализация нужна
0
Александр26
0 / 0 / 1
Регистрация: 25.09.2012
Сообщений: 96
08.03.2013, 15:27  [ТС] 6
Цитата Сообщение от Кудаив Посмотреть сообщение
alsav22, да ему похоже Си реализация нужна
желательно
0
HighPredator
08.03.2013, 15:43
  #7
 Комментарий модератора 
Александр26, в следующий раз в целевом разделе тему размещайте.
Перемещено.
0
Александр26
0 / 0 / 1
Регистрация: 25.09.2012
Сообщений: 96
08.03.2013, 17:19  [ТС] 8
Дан текстовый файл, содержащий последовательность слов. Между соседними словами – запятая, за последним словом – точка. Создать новый файл, содержащий все слова, отличные от последнего слова
вот начал, а как дальше, не пойму

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<string.h>
FILE *fin, *fout;
int main(void)
{
    int i, n;
    puts("vvedite predl");
    scanf("%d", &n);
    fin=fopen("files.txt", "rt");
    if(fin==NULL)
    {
                 puts("ERROR");
                 return 1;
    }
    fout=fopen("files_o.txt", "wt");
    if(fout==NULL)
    {
                  puts("ERROR fout");
                  return 2;
    }
0
alsav22
5461 / 4856 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.03.2013, 20:14 9
Цитата Сообщение от Кудаив Посмотреть сообщение
alsav22, да ему похоже Си реализация нужна
В С есть что-то похожее на peek() ?
1
Александр26
0 / 0 / 1
Регистрация: 25.09.2012
Сообщений: 96
08.03.2013, 20:38  [ТС] 10
Цитата Сообщение от alsav22 Посмотреть сообщение
В С есть что-то похожее на peek() ?
нет
0
alsav22
5461 / 4856 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.03.2013, 21:40 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
Александр26
0 / 0 / 1
Регистрация: 25.09.2012
Сообщений: 96
08.03.2013, 21:43  [ТС] 12
спасибо большое!
0
gazlan
3163 / 1922 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.03.2013, 23:04 13
Иными словами, удалить все дубликаты последнего слова?

Тогда, с него и начните. Найдите последнюю с конца запятую, то, что между ней и последующей точкой будет последним словом. Далее читаете слова из файла с начала по одному и сравниваете с последним. Если не совпало - пишете в выходной файл.
0
08.03.2013, 23:04
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2013, 23:04

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

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

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


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

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

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