输入:
brainfu*k 代码:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
程序:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXL 1000 /* * brainfuck 转换为 c语言,并执行 * buffer[] 存储数据 * order[] 存储brainfuck命令 */ int fun(char* brain_file) { FILE* input = fopen(brain_file, "r"); char buffer[MAXL] = {0}; char order[MAXL] = {0}; char *ptr, *wptr, *optr; int wflag = 0; optr = order; ptr = buffer; while (wflag || EOF != fscanf(input, "%c", optr)) { //printf("%c", *optr); switch(*optr) { case '>': ++ptr; break; case '<': --ptr; break; case '+': ++*ptr; break; case '-': --*ptr; break; case '.': putchar(*ptr); break; case ',': *ptr = getchar(); break; case '[': if (*ptr) { wptr = optr - 1; } else { wflag = 0; } break; case ']': wflag = 1; optr = wptr; break; case '\n':break; default:break; } optr++; } fclose(input); return 0; } int main(int argc, char* argv[]) { if(argc < 2) { printf("Usage: ./a.out brain_str"); return -1; } //printf("argv[1] is %s", argv[1]); fun(argv[1]); return 0; } 运行结果:Hello World!