Как упростить данный код? Если в файле 123456789, нужно чтобы в файл записалось 234567890
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void my_task(istream& in, ostream& out)
{
char buffer;
while (!in.eof())
{
while (in.get(buffer))
{
switch (buffer)
{
case '0':
out << 1;
break;
case '1':
out << 2;
break;
case '2':
out << 3;
break;
case '3':
out << 4;
break;
case '4':
out << 5;
break;
case '5':
out << 6;
break;
case '6':
out << 7;
break;
case '7':
out << 8;
break;
case '8':
out << 9;
break;
case '9':
out << 0;
break;
}
}
}
}
int main()
{
setlocale(LC_ALL, "Russian");
ifstream in("in.txt");
ofstream out("out.txt");
if (!in.is_open())
{
cout << "File not found" << endl;
}
else
{
my_task(in, out);
cout << "Result in Out.txt " << endl;
in.close();
out.close();
return 0;
}
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Вопрос в том, что делать, если в файле не только цифры, а, скажем, еще и перевод строки или буквы. Если только цифры - например, так:
void my_task(istream& in, ostream& out)
{
char buffer;
while(in.get(buffer))
{
if (buffer++ == '9') buffer = '0';
out << buffer;
}
}
int main()
{
ifstream in("in.txt");
if (!in.is_open())
{
cout << "File not found" << endl;
}
else
{
ofstream out("out.txt");
my_task(in, out);
cout << "Result in Out.txt " << endl;
}
}
Если есть еще и другие символы - добавить проверку isdigit на входе.
Кстати, вы делаете проверку, что открылся in.txt - а out.txt нет - нехорошо :)
Автор решения: Mikhailo
→ Ссылка
Можно так:
void my_task(istream& in, ostream& out)
{
char buffer;
while(in.get(buffer))
out << char((buffer - '0' + 1)%10 + '0');
}