|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼写的代码有些多了,应该主要是想照顾新手熟悉栈的特性。
整个进制转换程序是没有必要用到Push操作的。
可以直接把输入缓冲区的起始地址作为栈底,0结尾符前面一字节的地址作为栈顶
- stack1.free_size=stack1.StackSize=strlen(szBin);
- stack1.bottom=szBin;
- stack1.top=&szBin[stack1.StackSize-1];
复制代码
完整代码:
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- typedef struct
- {
- char *top;
- char *bottom;
- int free_size;
- int StackSize;
- }binStack;
- char stack_pop(binStack *stack1)
- {
- char ret;
- if(!stack1->free_size) return -1;
- ret = *stack1->top;
- stack1->top--;
- stack1->free_size--;
- return ret;
- }
- int CharToInt(char n){return (n=='0'?0:1);}
- int BinToDec(char *szBin)
- {
- binStack stack1;
- int sum1=0;
- if(!szBin) return -1;
- stack1.free_size=stack1.StackSize=strlen(szBin);
- stack1.bottom=szBin;
- stack1.top=&szBin[stack1.StackSize-1];
- for (int i=0;i<stack1.StackSize;i++)
- sum1+= CharToInt(stack_pop(&stack1))*pow(2.,i);
- return sum1;
- }
- int main()
- {
- char Buf[100]={0};
- while (1)
- {
- int Dec;
- printf("请输入二进制以:");
- scanf("%s",Buf);
- Dec=BinToDec(Buf);
- printf("结果为:%d\n\n",Dec);
- }
- return 0;
- }
复制代码
|
评分
-
查看全部评分
|