C/C++

Задача на c++

Есть текстовый файл. Надо вывести в новый файл каждую 3-ю букву из первого.
Вот пример кода на C++, который решает эту задачу:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
ifstream infile("input.txt");
ofstream outfile("output.txt");

if (! infile.is _open()) {
cout << "Ошибка: нечего считывать из файла.\n";
return 1;
}

if (! outfile.is _open()) {
cout << "Ошибка: не удалось создать файл вывода.\n";
return 1;
}

string line;

while (getline(infile, line)) {
for (int i = 0; i < line.length(); i += 3) {
outfile << line[i];
}
outfile << endl;
}

infile.close();
outfile.close();

cout << "Готово!\n";
return 0;
}

В первых 4-х строках мы импортируем необходимые библиотеки. Строка using namespace std; позволяет использовать стандартное пространство имён из C++.

Затем мы открываем входной файл и файл вывода с помощью ifstream и ofstream соответственно. Если файлы не открываются, то выводим сообщение об ошибке и завершаем работу программы.

Далее мы перебираем строки входного файла с помощью getline, и на каждой итерации цикла выбираем каждую третью букву с помощью цикла for и записываем её в выходной файл outfile.

В конце мы обязательно закрываем оба файла и выводим сообщение о завершении работы.
ХН
Хайитохун Нурдинов
528
Лучший ответ
Gregory _K
 while (getline(infile, line)) { 
for (int i = 2; i < line.length(); i += 3) {
outfile
Алексей Макаров Infile: "a\na\na\n" похоже выведет aaa ...

Но вообще, задание поставлено не достаточно четко.
С какой буквы нужно начать, с первой и далее каждая третья, или же третья и далее. Пропускать ли пробелы, табуляции и прочее (как указал выше Сергей).
Предлагаю добавить библиотеку <iterator> и <algorithm> и переписать главный цикл следующим образом.
 auto copy_conditions = [m=-1](char c)mutable{
if(std::isalnum(c)) m++;
return static_cast(m%3==0);
};

std::copy_if(
std::istream_iterator(infile),
std::istream_iterator(),
std::ostreambuf_iterator(outfile),
copy_conditions);
 #include   
#include
#include

int main()
{
std::locale loc("rus"); //шобы кирилицу считать буквами
std::ifstream inp("N:/input.txt"); //входящий файл
std::ofstream out("N:/output.txt"); //файл результата
char ch, it{};
while (inp.get(ch)) if (std::isalpha(ch, loc) && ++it % 3 == 0) { out.put(ch); it = 0; }
}
КК
Коля Кулкаев
51 416
Gregory _K Боюсь, что кирилицу в юникоде придётся по-другому обрабатывать.
Да и юникодов, как собак не резанных.