אני אתחיל בפירמוט הקוד שלך שנראה לא משהו בכלל
תגיד לי מורידים לכם ציון עם רווחים? או על ירידות שורה?
char str[40], *pstr;
int i, len, flag=0, sm=0, sr=0;
scanf("%s" ,str);
len = strlen(str);
pstr = str;
for(i=0;i<len;i++)
{
if( (*(pstr + i) != '{' ) &&
(*(pstr + i) != '}' ) &&
(*(pstr + i) != '(' ) &&
(*(pstr + i) != ')' ) )
{
flag=1;
}
}
if(flag==1)
{
printf("\n\n rong chars");
}
for(i=0;i<len;i++)
{
if(*(pstr+i)=='{')
{
sm++;
}
if(*(pstr+i)=='}' && sr==0)
{
sm--;
}
if(*(pstr+i)=='(')
{
sr++;
}
if(*(pstr+i)==')' && sm==0)
{
sr--;
}
}
if(sm==0 && sr==0)
{
printf("good");
}
else
{
printf("bad");
}
נמשיך בשאלה: איפה השימוש פה במחסנית?
ונוסיף עוד משהו: חוק הסוגריים במתמטיקה אומר דבר מאוד פשוט אם יש 2 סטים של סוגריים הם יכולים להופיע ב3 דרכים בלבד כך שיהיו תקינים
[] ()
() []
[ () ]
כמובן בלי הגבלת כלליות, ולכן אם סט אחד התחיל ובתוכו התחיל עוד סט הסט הפנימי חייב להסתיים לפני הסט החיצוני