使用栈实现2/8/16进制转换及删除已有栈中元素(C++)

1. 实现2/8/16进制的转换

String multibaseOutput(int num, int b) //主函数赋值数据和进制
{
	string digitChar =“0123456789ABCDEF”, numStr =“ ”;
	//首先先定义一个字符串数组和一个空的字符串以便下边使用
	stack<char> stk; //定义一个字符类型的新栈
        //做一个循环就是用数据除以进制
	do{
            stk.push(digitChar[num % b]);//取余数在字符串数组里找相应的字符组成进制表达式并且放在栈里 
            num /= b;//循环进行的条件,得到的值
	} while (num != 0);//在值为0前进行循环以便得到进制数
	while (!stk.empty())//要把栈里的东西全部放进去
	{
            numstr += stk.top(); //以叠加的方式放入栈里
            stk.pop();//放入一个删掉一个
	}
	return numStr;
}

2. 删除栈中元素

Template<typename>
Bool uncouple(stack<T> &s, const T &target) //利用bool判断
{
	stack<T> tmpStk;//新建一个栈
	bool foundTarget = true; //命令如果找到要删除的值为true
	while (!s.empty() && s.top() != target)
	//如果s栈不为空 并且 没有找到删除的值的时候执行循环
	{
            tmpstk.push(s.top()); //向新建的栈里放入s里遍历过但不是要找的的数值
            s.pop(); //删除找过的s栈里的数据,找s栈下一个数据
	}
	if (!s.empty()) //如果上边的s栈结束前找到了就直接删除
            s.pop();
	else //如果上边的循环结束还没有找到就输出找不到删的值
            foundTarget = false;
	while (!tmpStk.empty()) //上边的循环已经完成删除的动作,下边的就是需要把那些不需要删除的原始数据放回
	{
            s.push(tmpStk.top()); //向s里放回
            tmpStk.pop(); //删除s里的元素
	}
	return foundTarget;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值