输入改成getchar了,还是wa了个点 求dalao来看看 record
Code:
#include <bits/stdc++.h>
using namespace std;
string cd,buf;
int mem[30005],ptr = 0,res = 0;
int pa[30005];
void op(int &i) {
if (cd[i] == '<') {
ptr--;
} else if (cd[i] == '>') {
ptr++;
} else if (cd[i] == '+') {
mem[ptr]++;
} else if (cd[i] == '-') {
mem[ptr]--;
} else if (cd[i] == '.') {
cout << (char)(mem[ptr]);
} else if (cd[i] == ',') {
if (buf.size() == 0) {
mem[ptr] = -1;
} else {
mem[ptr] = buf[0];
buf = buf.substr(1);
}
} else if (cd[i] == '[') {
int pos = pa[i];
while (mem[ptr] != 0) {
for (int j = i + 1; j < pos; j++) {
op(j);
}
}
i = pos;
}
}
int main() {
char c;
while (1) {
c = getchar();
if (c != '$') {
cd += (c);
} else {
break;
}
}
getchar();
while (1) {
c = getchar();
if (c != ' ') {
buf += (c);
} else {
break;
}
}
getchar();
//cout << cd << "EOF\n";
//cout << buf << "EOF\n";
stack <int> st;
for (int i = 0; i < cd.size(); i++) {
if (cd[i] == '[') {
st.push(i);
} else if (cd[i] == ']') {
pa[st.top()] = i;
st.pop();
}
}
for (int i = 0; i < cd.size(); i++) {
op(i);
}
return 0;
}