在C语言的函数后标注small,大佬在吗,我用C写了一个去多重括号的函数,结果。。。...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include "malloc.h"

char * changeOrder(char *s);

struct Node

{

char *data;

struct Node * link;

};

struct Node * top1 = NULL;

struct Node * top2 = NULL;

void Push1(char *s)

{

struct Node * temp = (struct Node*) malloc(sizeof(struct Node));

temp->data = s;

temp->link = top1;

top1 = temp;

}

char * Pop1()

{

struct Node * temp;

if (top1 == NULL) return "No element found!";

temp = top1;

char *s = top1->data;

top1 = top1->link;

free(temp);

return s;

}

void Push2(char *s)

{

struct Node * temp = (struct Node*) malloc(sizeof(struct Node));

temp->data = s;

temp->link = top2;

top2 = temp;

}

char * Pop2()

{

struct Node * temp;

if (top2 == NULL) return "No element found!";

temp = top2;

char *s = top2->data;

top2 = top2->link;

free(temp);

return s;

}

//If a command has more than 50 character, or doesn't have ';'

//return 0. Else return 1.

int isLegal(char *s)

{

int smallNumber = 20;

if (strlen(s) < smallNumber) smallNumber = strlen(s);

for (int i = 0; i < smallNumber; i++)

{

if (s[i] == ';')

return 1;

}

return 0;

}

//Read one command form user input.

char *readCommand(char *s, int position)

{

if (isLegal(s) == 0)

{

return "Cannot find ';' in your command or the length"

" of your command is too long, try again!";

}

static char command[20];

int num = 0;

while (s[position] != ';')

{

command[num++] = s[position++];

}

command[num++] = ';';

return command;

}

char * changeOrder(char *s)

{

static char container[100];

int num = 0;

while (num < strlen(s))

{

if (s[num] == '(')

{

Push1("(");

num++;

}

else if (s[num] == ')')

{

while (true)

{

if (Pop1() == "(") break;

Push2(Pop1());

}

while (top2 != NULL)

{

strcat_s(container, Pop2());

}

}

else

{

char *t = readCommand(s, num);

Push1(t);

puts(t);

num += strlen(t);

}

}

while (top1 != NULL)

{

char *t = Pop1();

Push2(t);

}

while (top2 != NULL)

{

strcat_s(container, Pop2());

}

return container;

}

int main()

{

static char buf[] = { "command1;command2;command3;" };

puts(changeOrder(buf));

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值