C语言 补上所有缺少的括号?

Python017

C语言 补上所有缺少的括号?,第1张

可以使用栈解决类似的括号问题

遍历字符串,左括号直接入栈,右括号则弹出栈顶元素(必为对应的左括号)

最终栈中只剩下左括号,依次弹出并返回对应的右括号即可

C代码如下:

运行结果如下:

输出符合范例,望采纳~

附源码:

#include <stdio.h>

#define N 10000

// 定义栈

typedef struct Stack {

  char data[N]

  int len

}stack

void initStack(stack *s) { // 初始化

  s->len = 0

}

void push(stack *s, char c) { // 元素进栈

  s->data[s->len++] = c

}

char pop(stack *s) { // 弹出栈顶元素并返回其值

  s->len--

  return s->data[s->len]

}

int isEmpty(stack *s) { // 判断栈是否为空

  if (s->len == 0)

      return 1

  return 0

}

int isLeft(char c) { // 左括号返回1,右括号返回0

  if (c == '(' || c == '[' || c == '{')

      return 1

  else

      return 0

}

char getRight(char c) { // 输入左括号,返回对应右括号

  if (c == '(')

      return ')'

  else if (c == '[')

      return ']'

  else

      return '}'

}

int main() {

  char str[N + 1] = {0}, c

  scanf("%s", str)

  stack st

  stack *s = &st

  initStack(s)

  int i = 0

  while (str[i] != '\0') {

      c = str[i]

      if (isLeft(c)) // 左括号直接入栈

          push(s, c)

      else { // 弹出栈顶对应的左括号

          if (!isEmpty(s)) // 其实输入保证了栈始终非空

              pop(s)

      }

      i++

  } // 最终栈中都为左括号,依次弹出并输出对应的右括号即可  

  printf("%s", str)// 先输出原字符串

  while (!isEmpty(s)) { // 再依次输出补全的右括号

      c = pop(s)

      printf("%c", getRight(c))

  }

  printf("\n")

}

这要看你算不算符号位。

正常情况下最高位是符号位,所以最高位不变,其余位数的二进制数-1(111111111110100-1=111111111110011)再取反,即000000000001100。

算上最高位符号位1,原码就是1000000000001100,对应10进制就是-12。