Цель лабораторной работы: изучение структурной организации, способов доступа к элементам и других особенностей текстовых файлов; изучение стандартных средств языка C/C++ для работы со строками и текстовыми файлами; совершенствование навыков структурного программирования на языке C/С++ при решении задач редактирования текстовых файлов.
Задание на программирование:
Создать исходный текстовый фаил, внести в него введенные строки. Признак окончания ввода — пустая строка. Выделить из строк фаила слова - полиндромы и сохранить их в результирующем текстовом фаиле.
Схема алгоритма:
Текст программы:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream.h>
#include <ctype.h>
const max=256;
int k;
unsigned char str[max];
unsigned char str2[max/2][max];
unsigned char str3[max] = "";
char filename[40];
char filenameo[40];
void down(unsigned char str[max]);
int videl(unsigned char str[max], unsigned char str2[max/2][max]);
void pol(int k,unsigned char str2[max/2][max]);
void comb(int k,unsigned char str[max], unsigned char str2[max/2][max]);
int createf();
void palindrom(unsigned char str[max], unsigned char str3[max]);
int makeout(unsigned char str3[max]);
void main()
{
clrscr();
createf();
makeout(str3);
cout << "\nSlova palindromi uspeshno wiwedeny w fail << " << filenameo << " >>";
getch();
}
int createf()
{
unsigned char string[40];
cout << "enter filename\n";
cin.getline(filename,40);
ofstream file(filename);
if(!file)
{
cout << "File could not be opened!!\n";
return -1;
}
cout << "Wwedite stroki\n\n";
while(1)
{
cin.getline(string,50);
if (!strcmp(string,"")) break;
file << string << endl;
}
file.close();
return 0;
}
int makeout(unsigned char str3[max])
{
int i;
unsigned char string[max];
unsigned char string2[max];
cout << "enter output filename\n";
cin.getline(filenameo,40);
ofstream file_out(filenameo);
ifstream file(filename);
if(!file)
{
cout << "File could not be opened!!\n";
return -1;
}
while(1)
{
for(i=1;!file.eof(); i++)
{
file.getline(str, max);
palindrom(str,str3);
file_out << str3<< endl;
}
if (file.eof()) break;
}
return 0;
}
void palindrom(unsigned char str[max],unsigned char str3[max])
{
::str3[0]='\0';
down(str);
k = videl(str,str2);
pol(k,str2);
comb(k,str3,str2);
}
int videl(unsigned char str[max], unsigned char str2[max/2][max])
{
int i=0,j=0;
while(str[i])
{
int k=0;
while(str[i] == ' ') i++;
while(str[i] != ' ' && str[i])
{
str2[j][k] = str[i];
k++;
i++;
}
str2[j][k] = '\0';
j++;
}
return j;
}
void down(unsigned char str[max])
{
int i=0;
while(str[i])
{
if (str[i]=='.') str[i]=' ';
str[i]=tolower(str[i]);
i++;
}
}
void pol(int k,unsigned char str2[max/2][max])
{
int j,i=0;
while(i < k-1)
{
int len;
int j=0;
len = strlen(str2[i]);
while(j < len)
{
if (str2[i][j] != str2[i][len-j-1])
{
str2[i][j] = ' ';
str2[i][len-j-1] = ' ';
}
j++;
}
i++; }}
void comb(int k,unsigned char str3[max], unsigned char str2[max/2][max])
{
int i=0;
while(i<k-1)
{
int k=1;
int len,j=0;
len = strlen(str2[i]);
while (j<len-1)
{
if (str2[i][j] == ' ') k=0;
j++;
}
if (k == 1)
{
strcat(str3,str2[i]);
strcat(str3," ");
}
i++;
}
}
Скриншот работы программы:
Содержание фаилов 1.txt и 2.txt
1.txt
qwerty.
qwq.
asdfdsa asd asdsa.
qwewq.
qwertrewq.
2.txt
qwq
asdfdsa asdsa
qwewq
qwertrewq
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.