#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str[100];
char flag[100];
while(cin.getline(str,101))
{
int changdu=strlen(str);
int i=0;
while(i<changdu)
{
//先把括号都标记为错误;
for(int i1=0;i1<changdu;i1++)
{
switch(str[i1])
{
case '(':flag[i1]='$';
case ')':flag[i1]='?';
default:flag[i1]=' ';
}
}
//先看是否有左括号,若没有括号则到最后结束,若有左括号则继续寻找右括号;
//若无右括号则直接结束,若有右括号标记则清除标记并且把离右括号最近的左括号标记清除;
//清除完后,从头开始。
if(flag[i]=='$')
{
int temp=i;
while(flag[temp]!='?'&&temp<changdu)
temp++;
if(temp==changdu) break;
else flag[temp]=' ';
while(flag[temp]!='$')
temp--;
flag[temp]=' ';
i=0;
}
i++;
}
for(int i2=0;i2<changdu;i2++)
cout<<str[i2];
cout<<endl;
for(int i3=0;i3<changdu;i3++)
cout<<flag[i3];
cout<<endl;
}
return 0;
}
这段代码为什么一直输出标记的时候为空?
另外怎么使用递归来做这道题?
#include<string.h>
using namespace std;
int main()
{
char str[100];
char flag[100];
while(cin.getline(str,101))
{
int changdu=strlen(str);
int i=0;
while(i<changdu)
{
//先把括号都标记为错误;
for(int i1=0;i1<changdu;i1++)
{
switch(str[i1])
{
case '(':flag[i1]='$';
case ')':flag[i1]='?';
default:flag[i1]=' ';
}
}
//先看是否有左括号,若没有括号则到最后结束,若有左括号则继续寻找右括号;
//若无右括号则直接结束,若有右括号标记则清除标记并且把离右括号最近的左括号标记清除;
//清除完后,从头开始。
if(flag[i]=='$')
{
int temp=i;
while(flag[temp]!='?'&&temp<changdu)
temp++;
if(temp==changdu) break;
else flag[temp]=' ';
while(flag[temp]!='$')
temp--;
flag[temp]=' ';
i=0;
}
i++;
}
for(int i2=0;i2<changdu;i2++)
cout<<str[i2];
cout<<endl;
for(int i3=0;i3<changdu;i3++)
cout<<flag[i3];
cout<<endl;
}
return 0;
}
这段代码为什么一直输出标记的时候为空?
另外怎么使用递归来做这道题?









