说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

急!在线等待!

编辑:说三道四文库 发布时间:2018-02-21 07:23
HTML文档下载 WORD文档下载 PDF文档下载
请帮忙用c写一个小函数,判断输入的字符串(表达式)里括号(‘(’,‘)’)是不是配对的程序。多谢了!!!!!!!!
char *s;
int i,a = 0;

for(i = 0; i < strlen(s); i++)
  if (s[i] == '(') a++;
  else if (s[i] == ')') a--;
if (a == 0) 
  printf("匹配\n");
else
  printf("不匹配\n");

是不是这样啊?不知道你是什么具体要求的说。
第一个不应该是)
中间加一句
if(a<0)
  break;
使用堆栈来实现。遇到(入栈,遇到)判断栈是不是空,如果不是空则出栈,否则出错,到最后一个出栈后栈为空,则匹配。
/*我已搞定!VC ,pass
请帮忙用c写一个小函数,判断输入的字符串(表达式)里括号(‘(’,‘)’)是不是配对的程序。多谢了!!!!!!!!
*/

#include <stdio.h>

#define MAX 100

char s[MAX];  //define a stack of char type
int top;   //init top 0 to MAX-1

int push(char ch); //push ch to stack st,success returns 1

void main()
{
int i=0,j=0;
char ch;
//
for (;;)
{
ch=getc(stdin);
if (ch=='(')
{
push(ch);
i++;
}
if(ch==')')
{
push(ch);
j++;
}
if (ch=='\n') break;
}
//
if (i==j)
printf("匹配\n");
else
printf("不匹配\n");
}

int push(char ch) //push ch to stack st,success returns 1
{
if (top==MAX-1)
{
printf("full\n");
return(0);
}
else
{
top++;
s[top]=ch;
return(1);
}
}

好好好,各位思路都不错,基本上符合我的算法。
但都少考虑了一个问题,括号配对不单单是左右括号是否相等,还要保正其语法,如果有
a+b)-a(kj.这样就遭了。我也是刚被逼出来的。多谢了
那就是一个附加条件,每一个干净的状态后(即括号全部成对抵消,当然刚开始没有括号也是干净的),第一个出线的括号不能是),而只能是(。

#include <stdio.h>
#include <string.h>
int fn(char* ch)
{
int x=0;
for (int i=0;i<strlen(ch);i++)
{
if (ch[i]=='(')
x++;
if (ch[i]==')')
{
x--;
if (x<0) return 1;
}
}
if (x!=0) return 1;
return 0;
}
void main()
{
char ch[]="a+b)-a(kj";  //要判断的字串
if (fn(ch)==0)
printf("ok!\n");
else
printf("error!\n");
}

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘