我正在使用C++(在xcode和code :: blocks中),我不太了解.我想在运行时编写一些可编译的东西.
例如:
char prog []={"cout<<"helloworld " ;}
Run Code Online (Sandbox Code Playgroud)
它应该编译prog的内容.我读了一些关于quines的文章,但它对我没有帮助.
我想打印,如标题中所述,我的整个功能.
(DEFUN X () ...)
-> (DEFUN X () ...)
Run Code Online (Sandbox Code Playgroud)
我需要写什么"......"?
这是代码.它基本上从原始代码文件中读取并打印到终端上.
import java.io.*;
public class Quine
{
static void Quine() throws IOException
{
FileReader fr = new FileReader("C:/Quine.java");
BufferedReader br = new BufferedReader(fr);
String s = "";
while((s = br.readLine()) != null)
{
System.out.println(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,它工作正常,产生与输出完全相同的代码.但根据定义,它是否有资格作为quine?考虑到我仍然将文件作为参数传递给它.尽管它是程序员指定的而不是用户输入的输入,它仍被视为输入吗?
有多少种方法让代码输出自己?
例如,写下面的代码,
public class Test
{
public static void main(String[] args)
{
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
输出自己
public class Test
{
public static void main(String[] args)
{
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
(接受任何编程语言)
编辑此问题已在历史文章中找到,搜索"quine"或查看https://stackoverflow.com/search?q=quine
我在质疑我对Accelerated C++的最后一个练习的解决方案:
写一个自我复制的程序.这样的程序是没有输入的程序,并且在运行时,在标准输出流上写入其自己的源文本的副本.
我的解决方案
using std::string;
using std::cout;
using std::endl;
using std::ifstream;
using std::getline;
void selfReproduce16_1()
{
ifstream thisFile("C:\\Users\\Kevin\\Documents\\NetBeansProjects\\Accelerated_C++_Exercises\\Chapter_16.cpp", ifstream::in);
string curLine;
bool foundHeader = false;
while(getline(thisFile, curLine))
{
if(!curLine.compare("void selfReproduce16_1()") || foundHeader)
{
foundHeader = true;
cout << curLine << endl;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这仅打印出解决方案的源文本(此功能).这是他们想到的解决方案吗?
我想要一个动态解决方案,不需要硬编码源文件的位置.但是,我不知道在运行时自动获取源文件位置的方法.
与此相关的另一点是包含"包含"文件,并且(当遇到函数调用时),自动获取存储函数的源文件的位置.对我来说,这将是一个真正的"自我复制" "节目.
这在C++中是否可行?如果是这样,怎么样?
我刚刚遇到了这个问题,但没有人真正了解它是如何工作的:C/C++程序打印自己的源代码作为输出
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
Run Code Online (Sandbox Code Playgroud)
我特别不明白的是,即使我更改了int,以下也有相同的输出:
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,5,s,11);}
Run Code Online (Sandbox Code Playgroud)
它仍然打印34s!有人可以一步一步地指导我吗?
_='_=%r;print (_%%_) ';print (_%_)
Run Code Online (Sandbox Code Playgroud)
(编辑:我已收到您的输入并修复了代码,感谢您的更正。)
这是您可以用 Python 编写的最短的 quine(有人告诉我)。一个返回自身的代码。
有人可以像我对 Python 一无所知一样向我解释这行代码吗?顺便说一下,我使用 Python 3.x。
我正在寻找的是对正在发生的事情的逐字解释。
谢谢。
在我的课程幻灯片中,我有这个例子,但没有太多解释:
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
Run Code Online (Sandbox Code Playgroud)
我理解quine 程序的一般含义,但我不太明白上面的代码中发生了什么。这是我运行它时得到的输出:
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
Run Code Online (Sandbox Code Playgroud)
但它如何复制自己的代码呢?我真的不明白输出是如何产生的。