Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.07.2018
Сообщений: 55
1

Текстовые файлы: оставить в каждом слове только первые вхождения каждой буквы

11.01.2019, 22:17. Просмотров 615. Ответов 1

Здравствуйте, прошу помочь с заданием по программированию.
Задание на программирование: используя технологию процедурного программирования разработать программу обработки текстовых файлов с числом строк не менее пяти, каждая из которых содержит не более 80 символов, в соответствии с индивидуальным заданием.
Индивидуальное задание
Дан текст. Словом текста считается любая последовательность букв алфавита; между соседними словами - не менее одного пробела. Перед первым и за последним словом каждой строки произвольное число пробелов. Оставить в каждом слове только первые вхождения каждой буквы.

Помогите, пожалуйста, составить код.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2019, 22:17
Ответы с готовыми решениями:

Оставить в слове только первые вхождения каждой буквы
Задав с клавиатуры последовательность символов, реализовать обработку ее.Исходные данные задать...

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

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

Оставить в словах только первые вхождения каждой буквы.
Всем Hello! Помогите с решением друзья, буду очень благодарен))) Строки: 1) Оставить в словах...

1
0 / 0 / 0
Регистрация: 04.07.2018
Сообщений: 55
24.01.2019, 17:25  [ТС] 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
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
//Программа создает файл строк. Признак окончания ввода -
//пустая строка. Затем файл построчно читается,
//и программа удаляет из каждой строки, содержащей слова,
//разделенные произвольным количеством пробелов, все слова с чётным номером.
//Обработанная строка записывается в новый файл
//Тема: ОБРАБОТКА С-СТРОК + ФАЙЛЫ (ПОТОКИ)
 
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
using namespace std;
#define FNAME_I "D:\\st_i.txt\0"    //имя исх. файла задано константной строкой
#define FNAME_R "D:\\st_r.txt\0"    //имя рез. файла задано константной строкой
const int RAZ = 1000 ;          //максимильная длина строки
const char PR_R[] = "r" ;       //признак открытия файла на чтение
const char PR_W[] = "w" ;       //признак открытия файла на запись
void make_file(char*) ;         //функция создания файла
int proverka_file(char*, const char*) ; //проверка наличия файла
void obrabotka_file(char*, char*) ; //обработка содержимого
void vivod_file(char*) ;            //вывод содержимого файла на печать
 
//main_Begin______________________________________________________________
int main()
{char fname_i[] = FNAME_I ;
 char fname_r[] = FNAME_R ;
 clrscr() ;
//создаем исходный файл
 make_file(fname_i) ;
 
//выводим его содержимое
 if(!proverka_file(fname_i, PR_R))
   {cout << "Ошибка открытия файла " << fname_i << " на чтение" << endl ;
    cout << "Нажмите <Enter>" << endl ;
    getchar() ;
    return 0 ;          //если исходный файл не создан
   }
 cout << "Содержимое исходного файла:" << endl ;
 vivod_file(fname_i) ;
 
//обрабатываем файл
 obrabotka_file(fname_i, fname_r) ;
 
//выводим содержимое результата
 if(!proverka_file(fname_r, PR_R))
   {cout << "Ошибка открытия файла " << fname_r << " на чтение" << endl ;
    cout << "Нажмите <Enter>" << endl ;
    getchar() ;
    return 0 ;          //если результирующий файл не создан
   }
 cout << "Результат (в каждой строке удалены слова с чётным номером):\n" ;
 vivod_file(fname_r) ;
 
 cout << endl << "Для завершения нажмите <Enter>" ;
 getchar() ;
 return 0 ;
}
//main_End________________________________________________________________
//make_file_ Begin________________________________________________________
void make_file(char *fname_i)
{char st[RAZ] ;         //исходная строка
 FILE *in ;             //текстовый файл
 char otv ;     //ответ пользователя
//Открываем файл в режиме чтения (r)
//Если файл с таким именем уже есть, то либо пользователь вводит
//новое имя, либо новые записи будут дописаны поверх старых
 while(proverka_file(fname_i, PR_R))
   {cout << "Такой файл уже есть! Зададите новое имя Y/N?" << endl ;
    cin.get(otv) ;
    if(otv == 'Y' || otv == 'y')
      {cout << "Введите новое имя:" << endl ;
       cin >> fname_i;
       cin.get() ;  //убираем символ '\n' из потока
      }
    else {cin.get() ;   //убираем символ '\n' из потока
      break ;
     }
   }
//проверяем возможность открытия файла для записи
//поскольку полное имя файла могло быть задано с ошибкой
 if(!proverka_file(fname_i, PR_W))
   {cout << "Ошибка открытия файла " << fname_i << " на запись" << endl ;
    cout << "Нажмите <Enter>" << endl ;
    getchar() ;
    exit(0) ;
   }
//Открываем файл в режиме записи (w) текста (по умолчанию)
//Если файл с таким именем уже есть, то новые данные
//будут дописаны поверх старых
 in = fopen(fname_i, PR_W) ;
 cout << "Создание файла." << endl ;
 cout << "Признак окончания ввода - ввод пустой строки" << endl ;
 cout << "Введите строку и нажмите <Enter>" << endl;
 cout << "->" ;
 cin.getline(st, RAZ) ; //функция вводит строку целиком, включая
            //пробелы и символ \n
 while(strlen(st))
   {fprintf(in, "%s\n", st) ;
    cout << "Введите строку и нажмите <Enter>" << endl ;
    cout << "->" ;
    otv++ ;
    cin.getline(st, RAZ) ;
   }
 fclose(in) ;       //закрываем файл
}
//make_file_End___________________________________________________________
 
//proverka_file_Begin_____________________________________________________
//проверка наличия файла
int proverka_file(char *fname, const char *pr)
{
//Открываем файл
 if((fopen(fname, pr)) == NULL) //если файл не существует
    return(0) ;
 return(1) ;
}
//proverka_file_End_______________________________________________________
 
 
//obrabotka_file_Begin____________________________________________________
//обработка содержимого файла
void obrabotka_file(char *fname_i, char *fname_r)
{FILE *in, *out ;           //исходный и результирующий файлы (потоки)
 char st_in[RAZ] ;          //исходная строка
 char st_out[RAZ] ;         //результирующая строка
 int i, j ;                 //признак нечетного номера слова
 int count = 0;
 char temp;
 char *p ;      //указатель на выделенное слово
 in = fopen(fname_i, PR_R) ;        //открываем файл на чтение
 out = fopen(fname_r, PR_W) ;   //открываем файл на запись
 fgets(st_in, RAZ, in) ;        //читаем строку из файла in
 while(!feof(in))
   {p = strtok(st_in, " ") ;        //выделяем первое слово (лексему)
    while(st_in)                //если очередное слово выделено
      {         
        for ( i = 0; i < strlen(p); i++) 
         {  
          temp = p[i]; // временному присваиваем символ
          for ( j = 0; j < i; j++) // сравниваем с предыдущеми символами
           {if(temp == p[j]) 
            count++; // в случае совпадения увеличиваем счётчик
            if(count == 0) 
            strcat(st_out, p) ;     //добавляем слово к результату
            count = 0; // сбрасываем на 0
          }
        }
       strcat(st_out, " ") ;    //добавляем пробел между слов
       p = strtok(NULL," ") ;   //выделение последующих слов
     }//while(st_in)
    st_out[strlen(st_out) - 1] = '\0' ; //убираем последний пробел
    fprintf(out, "%s\n", st_out) ; //записываем обработанную строку в новый файл
    fgets(st_in, RAZ, in) ;     //считываем новую строку из файла
   }//while(!feof(in))
 fclose(in) ;               //Закрываем файл in
 fclose(out) ;              //Закрываем файл out
}
//obrabotka_file_End______________________________________________________
 
//vivod_file_Begin________________________________________________________
//вывод содержимого файла на экран
void vivod_file(char *fname)
{FILE *in_out ;
 char st[RAZ] ;             //считанная строка
 
 in_out = fopen(fname, PR_R) ;  //открываем файл на чтение
 fgets(st, RAZ, in_out) ;       //читаем строку из файла in_out
 while(!feof(in_out))
   {cout << st ;                //выводим очередную строку на экран
    fgets(st, RAZ, in_out) ;
   }
 fclose(in_out) ;
}
//vivod_file_End__________________________________________________________
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2019, 17:25

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

Оставить в словах только первые вхождения каждой буквы
Дана строка, содержащая последовательность слов, разделенных пробелами. Произвести со строкой...

Файлы. Оставить в слове только первые вхождения каждой буквы
Оставить в слове только первые вхождения каждой буквы

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

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

Оставить в слове только первые вхождения каждой буквы
оставить в слове только первые вхождения каждой буквы.

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


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

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

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