user-0 提问: 写了段c 求大神给给指导

回复:
user: user-1
content: 仅供参考#include<stdio.h> #include<malloc.h> #include<string.h> #define STACK_INIT_SIZE 10 #define STACK_GROW_SIZE 5 #define ELEMTYPE char #define OK 1 #define ERROR 0 typedef struct { /*建立一个栈的首结点*/     ELEMTYPE * base;     ELEMTYPE * top;     int stacksize; } SpStack; int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/     s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));     if (!s->base) return ERROR;     s->top=s->base;     s->stacksize=STACK_INIT_SIZE;     return OK; } int StackEmpty(SpStack *s) { /*判断栈是否为空*/     if (s->top==s->base) return OK;     else                 return ERROR; } int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/     if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/         s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));         if (!s->base) return ERROR;         s->stacksize+=STACK_GROW_SIZE;         s->top=s->base+s->stacksize;     }     *s->top++=e;     return OK; } int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/     if (StackEmpty(s)) return ERROR;     *e=*(--s->top);     return OK; } int Comp(ELEMTYPE a,ELEMTYPE b) {     if ((a=='('&&b!=')')       ||(a=='['&&b!=']')       ||(a=='{'&&b!='}')) {         return ERROR;     } else return OK; } int Count(SpStack *s) {     ELEMTYPE e[STACK_INIT_SIZE*2];     ELEMTYPE e1;     int i;      InitStack(s);     fgets(e,STACK_INIT_SIZE*2,stdin);     if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;     printf("%s\n",e);     for (i=0;e[i]!='\0';i++) {         switch (e[i]) {         case '(':         case '[':         case '{':             Push(s,e[i]);             break;         case ')':         case ']':         case '}':             if (StackEmpty(s)) {                 printf("%*s↖右括号多余\n",i+1,"");                 return(ERROR);             } else Pop(s,&e1);             if (!Comp(e1,e[i])) {                 printf("%*s↖左右匹配出错\n",i+1,"");                 return(ERROR);             }         }     }     if (!StackEmpty(s)) {         printf("%*s↖左括号多余\n",i,"");         return(ERROR);     } else {         printf("匹配正确\n");         return(OK);     } } void main() {     SpStack s;     Count(&s);     free(s.base); }  //现在有一段文本。。 // 我需要把文本中/*....*/（注释中的内容）提取出来，存在一个字符串变量中 // 其中注释中有空格，数字，字母，换行等 // 并且有多段注释，多段注释并不相连 // 请问该如何编写 //注意：以下代码不支持/* */嵌套比如/*A/*B*/C*/ #include <stdio.h> #define MAXL 40 char s0[]="/**/"; char s1[]="/*A*/"; char s2[]="A/*B*/"; char s3[]="A/*B*/C"; char s4[]="A/*B 1a\n*/C"; char s5[]="A/*B*//*C*/"; char s6[]="A/*B*/C/*D*/"; char s7[]="A/*B*/C/*D*/E"; char s8[]="/*A/*B*/C*/"; char s9[]="A/*B*//*C"; char t[MAXL]; int st,i,j,k,L; char c; void test(char *s) {     st=0;     i=0;     j=0;     while (1) {         c=s[i];         if (0==c) {t[j]=0;break;}         switch (st) {         case 0:// 初始状态             if ('/'==c) st=1;         break;         case 1:// '/'之后             if ('*'==c) {k=j;st=2;}             else st=0;         break;         case 2:// "/*"之后             if ('*'==c && '/'==s[i+1]) {i++;st=0;}             else {                 t[j]=c;                 j++;                 if (j>=MAXL-1) {t[j]=0;goto END;}             }         break;         }         i++;     }     if (2==st) t[k]=0; END:     printf("s[%s],t[%s]\n",s,t); } int main() {     test(s0);     test(s1);     test(s2);     test(s3);     test(s4);     test(s5);     test(s6);     test(s7);     test(s8);     test(s9);     return 0; } // s[/**/],t[] // s[/*A*/],t[A] // s[A/*B*/],t[B] // s[A/*B*/C],t[B] // s[A/*B 1a // */C],t[B 1a // ] // s[A/*B*//*C*/],t[BC] // s[A/*B*/C/*D*/],t[BD] // s[A/*B*/C/*D*/E],t[BD] // s[/*A/*B*/C*/],t[A/*B] // s[A/*B*//*C],t[B]