Кто нибудь писал quine? - C (СИ)
Формулировка задачи:
писал свой quine но не вот эту классику
Это классический Куайн на Си, полностью соответствующий ANSI Си.
#include<stdio.h>
char*i="\\#include<stdio.h> ",n='\n',q='"',*p=
"%s%cchar*i=%c%c%s%c,n='%cn',q='%c',*p=%c%c%s%c,*m=%c%c%s%c%c;%s%c",*m=
"int main(){return!printf(p,i+1,n,q,*i,i,q,*i,q,n,q,p,q,n,q,m,q,n,m,n);}"
;int main(){return!printf(p,i+1,n,q,*i,i,q,*i,q,n,q,p,q,n,q,m,q,n,m,n);}Решение задачи: «Кто нибудь писал quine?»
textual
Листинг программы
#include <algorithm>
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
int main()
{
std::copy(std::istream_iterator<std::string>(std::ifstream("main.cpp"))
, std::istream_iterator<std::string>()
, std::ostream_iterator<std::string>(std::cout, "\n"));
}
Объяснение кода листинга программы
В этом коде программа считывает файл main.cpp построчно и выводит каждую строку на стандартный вывод с символом новой строки после неё.
Код использует следующие стандартные библиотеки C++:
<algorithm>- Эта библиотека содержит алгоритмы для работы с контейнерами.<iostream>- Эта библиотека содержит функции для ввода и вывода данных.<iterator>- Эта библиотека содержит итераторы для работы с контейнерами.<fstream>- Эта библиотека содержит классы для работы с файлами.<string>- Эта библиотека содержит классы и функции для работы со строками. Переменные, используемые в коде:std::string main_cpp_content- переменная, которая содержит содержимое файлаmain.cpp.std::istream_iterator<std::string>- итератор для чтения строк из потока ввода.std::ostream_iterator<std::string>- итератор для записи строк в поток вывода.std::cout- поток вывода, используемый для записи строк. Выполняемые действия:- Создается объект
std::istream_iterator<std::string>(std::ifstream(main.cpp)), который инициализирует итератор для чтения строк из файлаmain.cpp. - Создается объект
std::ostream_iterator<std::string>(std::cout,\n), который инициализирует итератор для записи строк в поток вывода с символом новой строки после каждой строки. - Вызывается функция
std::copy()для копирования строк из итератора чтения в итератор записи. - Копирование продолжается до тех пор, пока не будут прочитаны все строки из файла
main.cpp. - Программа завершается.