Как поменять Куайна? - PullRequest
       10

Как поменять Куайна?

0 голосов
/ 12 сентября 2010

Я написал программу на C, которая печатает себя n раз, но я не могу понять, как печатать ее обратно так же n раз. Например, если образец программы:

hello

тогда требуемый вывод должен быть "olleh" for n=1. Вот моя программа Quine,

#include <stdio.h>
int main()
{
  int n;
  char c;
  FILE *f;
  f=fopen(__FILE__,"r");
  scanf("%d",&n);
 while(n--)
 {
 while((c=getc(f))!=EOF)
 putchar(c);
 fseek(f,0,0);
 }
  return 0;
} 

Ответы [ 3 ]

3 голосов
/ 12 сентября 2010

Это не чистая квинна.См. статью Quine в Википедии :

Quine не требует ввода.Разрешение ввода позволило бы вводить исходный код в программу через клавиатуру, открывать исходный файл программы и аналогичные механизмы.

2 голосов
/ 26 февраля 2011

Только что наткнулся на этот пост.Вот образец обратного Quine в C, который я сделал.Вы можете изменить его в соответствии с вашими потребностями!

a="};)01(rahctup;)--p*(rahctup);p*;43=p*(rof;)a(ftnirp;))a,b=p(tacrts(nelrts=+p{)p*rahc(niam;}7393422{=]99[b;";b[99]={2243937};main(char*p){p+=strlen(strcat(p=b,a));printf(a);for(*p=34;*p;)putchar(*p--);putchar(10);}
1 голос
/ 12 сентября 2010

Самый простой способ - прочитать файл в массив (например, answer ), а затем просто перевернуть массив:

void swap(char* a, char* b) {
  char tmp = *b;
  *b = *a;
  *a = tmp;
}

void reverse(char* arr, int size) {
  for (int i = 0; i < size/2; ++i) {
    swap(arr+i, arr + (size - (i + 1)));
  }
}
...