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.
В конце мы обязательно закрываем оба файла и выводим сообщение о завершении работы.
#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.
В конце мы обязательно закрываем оба файла и выводим сообщение о завершении работы.
#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; }
}
Gregory _K
Боюсь, что кирилицу в юникоде придётся по-другому обрабатывать.
Да и юникодов, как собак не резанных.
Да и юникодов, как собак не резанных.
Но вообще, задание поставлено не достаточно четко.
С какой буквы нужно начать, с первой и далее каждая третья, или же третья и далее. Пропускать ли пробелы, табуляции и прочее (как указал выше Сергей).
Предлагаю добавить библиотеку <iterator> и <algorithm> и переписать главный цикл следующим образом.