#include <bits/stdc++.h> using namespace std; int main() { string a,b; int t[1001],n; while(cin>>n>>a>>b) { stack<char> k; int x=0,y=0; for(int i=0;i<n;i++) { k.push(a[i]); t[x++]=0; while(!k.empty() && k.top()==b[y])//栈顶与b[y]相等 { k.pop(); y=y+1; t[x++]=1; } } if(y!=n) cout<<"No."<<endl; else { cout<<"Yes."<<endl; for(int i=0;i<x;i++) { if(t[i]==0) cout<<"in"<<endl; else cout<<"out"<<endl; } } cout<<"FINISH"<<endl; } return 0; }
x++是个坑,立即使用的时候x的值没有增加,当下一次用的时候x的值才会增加。假如x的初值为0,定义一个int a[100],a[x++]是从x=0开始的
又比如最后一个for循环:
for(int i=0;i<x;i++) 这里面的x就是增加过的,所以如果这个时候写成i<=x就会多输出一个out(这里有个疑问,在main()函数外没有赋值的整形数组的初值都为0,在这里我把int t[1001];写在外面之后又运行发现确实是这样,但是写在main()内的初值为1吗,因为这样得到的输出为out)
开始没看懂in和out应该怎么输出,看了别人的代码,学习到了
今天上课讲了++的运算,之前没有系统的学习过,现在再写一点
x++:先返回再加一 ++x:先加一再返回
x++的加一操作在下一次使用时内存中存的值就加一了
++运算的左端必须是一个变量,如a+++++b(即((a++)++)+b,根据贪心得到的)因为a++得到的是一个数值,而不是一个变量,故编译不通过(就如同1++一样,不是变量)写成a+++++b或(a++)+(++b)就行
而++++x是存在的,即进行两次++运算