Тема: Робота програми з внутрішніми і зовнішніми данними.
Програма повинна зчитувати строку, яку вписує користувач, знаходити слова з непарною кількістю літер і подвоювати в них середню.
Виникло питання, як переробити цю програму так, щоб вона непрацювала з зовнішніми данними, (input.txt та output.txt), а вписувати слово в консолі і отримувати результат. Буду вдячний за конструктивну відповідь і за приклад.
З.І Прошу вибачення за російську в коді.
#include <fstream> // Библиотека для работы с файлами
#include <iostream> // Библиотека ввода-вывода
#include <string.h> // Библиотека для работы со строками
using namespace std;
char word[30]; // Сюда будет сохраняться по одному слову
char buffer[500000]={NULL}; // Сюда вводится текст
char new_buffer[500000]={NULL}; // Сюда сохраняется новый текст, по ходу выполнения программы
int i; // Счетчик для текущего буфера
int n; // Счетчик для нового буфера
int j; // Счетчик длины слова
int flag=0; // Флаг для проверки
void find_word(void) // Функция, которая ищет одно слово среди пробелов, запятых и прочих знаков
{
int count_func=0;
while((buffer[i]>=65 && buffer[i]<=90) || (buffer[i]>=97 && buffer[i]<=122)) // Условие основывается на кодах ASCII
{
word[count_func]=buffer[i];
++count_func; ++i; ++j;
}
}
void insert_space(void) // Функция, которая восполняет все пробелы и прочие знаки, которые были введены
{
while((buffer[i]<65) || (buffer[i]>=91 && buffer[i]<=96) || (buffer[i]>=123 && buffer[i]<=190))
{
new_buffer[n]=buffer[i];
++n; ++i;
if(buffer[i]=='\0')
return;
}
}
void double_letter(void) // Функция, которая удваивает букву по центру
{
int y=(j-1)/2;
int f=0;
if((j>4)&&(j%2!=0))
{
for(f=0; f<=y; f++,++n)
{
new_buffer[n]=word[f];
}
new_buffer[n]=word[f-1];
while(f<j)
{
new_buffer[n+1]=word[f];
++n; ++f;
}
++n;
}
if((j<4)&&(j%2!=0))
{
if(j==1)
{
new_buffer[n]=word[f];
++n;
new_buffer[n]=word[f];
++n; ++f;
}
if(j==3)
{
new_buffer[n]=word[f];
++n; ++f;
new_buffer[n]=word[f];
++n;
new_buffer[n]=word[f];
++n; ++f;
new_buffer[n]=word[f];
++n; ++f;
}
}
if(j%2==0)
for(int v=0; v<j; v++, n++)
{
new_buffer[n]=word[v];
}
}
void end(void) // Функция, которая проверяет закончился ли текст или нет
{
for(int k=0; k<10; k++)
{
if((buffer[i+k]>=65 && buffer[i+k]<=90) || (buffer[i+k]>=97 && buffer[i+k]<=122))
{
flag=1;
return;
}
}
}
int main(int argc, const char * argv[])
{
ifstream in;
ofstream out;
in.open("input.txt"); // Привязка файла инпут
out.open("output.txt"); // Привязка файла отпут
in.getline(buffer, 500000, EOF); // Функция считывания из файла инпут
while(buffer[i+1]!=EOF)
{
insert_space();
find_word();
double_letter();
insert_space();
end();
if(flag==0)
{
break;
}
j=0; flag=0;
}
for(int f=0; f<=n; f++)
out << new_buffer[f];
return 0;
}