したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

490 ◆rCEzuNnL0g:2008/09/28(日) 14:18:47
#include <iostream>
#include <string>
#include <sstream>

bool Brainfuck(std::basic_istream<wchar_t> &s, std::basic_ostream<char> &out, std::basic_istream<char> &in){
std::wstring wstr;
s >> wstr;

static unsigned char data[100000];
memset(data, 0, sizeof(data));
const wchar_t *pstr = wstr.c_str();
unsigned int ptr = 0, c = 0;
unsigned int length = wstr.length();

for(; c < length; c++){
switch(pstr[c]){
case L'>': ptr++; break;
case L'<': if(ptr) ptr--; break;
case L'+': data[ptr]++; break;
case L'-': data[ptr]--; break;
case L'.': out << data[ptr] << std::flush; break;
case L'[':
if(!data[ptr]){
unsigned int m = 0;
while(1){
switch(pstr[++c]){
case L'[': m++; break;
case L']': if(!m--) goto out1;
}
}
out1:;
} break;
case L']':
if(data[ptr]){
unsigned int m = 0;
while(1){
switch(pstr[--c]){
case L'[': if(!m--) goto out2;
case L']': m++; break;
}
}
out2:;
} break;
case L',': break; //TODO:
}
}

return true;
}

int main(int argc, char **argv){
std::wstring wstr;
while(1){
std::wstring buff;
std::getline(std::wcin, buff);
if(buff == L"end") break;
wstr += buff;
}
std::basic_istringstream<wchar_t> buff(wstr);
Brainfuck(buff, std::cout, std::cin);
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板