[传智杯 #3 练习赛] 单位转换 (strtok函数应用)

[传智杯 #3 练习赛] 单位转换

题目描述

我们知道计算机的大小单位有 B, KB, MB 等,现在请你编写一个计算器进行大小单位换算。

提示, 1 1 1 GB = 2 10 2^{10} 210 MB = 2 20 2^{20} 220 KB = 2 30 2^{30} 230 B。

输入格式

输入一个字符串,由一个 0 到 1023 之间的整数,一个单位名称(大写字母),一个等于号和问号,以及第二个单位名称。

单位只有可能是 GB,MB,KB,B 之间的一个。

输出格式

输出一个数字,精确到小数点后 6 位。

样例 #1

样例输入 #1

128MB=?GB

样例输出 #1

0.125000

样例 #2

样例输入 #2

64MB=?KB

样例输出 #2

65536.000000

本人思路(小白一枚,解法可能不是很好,单纯运用下字符串函数语法知识)路过的大神看到有更好的题解可以在评论区发出感谢
//思路1:用strtok函数分割开来算
//思路2:用string find and substr 搭配来用

题解1:

#include<iostream>
#include <string>
#include <cstring>
#include <cmath>
//思路1:用strtok函数分割开来算
//思路2:用string find and substr 搭配来用 
using namespace std;
int conversion(char ch) {
	if(ch == 'G') return 30;
	if(ch == 'M') return 20;
	if(ch == 'K') return 10;
	if(ch == 'B') return 0;
}
int main(){
	//解法一
	string s,strs[4];
	char *p;	//接受分割的字符串
	getline(cin,s);
	char sc[s.length() + 1];
	strcpy(sc,s.c_str());
	const char div[4] = "=?";
	p = strtok(sc,div);
	int index = 0;
	while(p != NULL) {
		strs[index++] = p;
		p = strtok(NULL,div);
	}
	char ch1 = strs[0][strs[0].length() - 2];
	string s1 = strs[0].substr(0,strs[0].length() - 1);
	int x = stoi(s1);
//	int b = atoi(s1);	//atoi()要转换为char类型才可用 
	char ch2 = strs[1][0];
	int con = conversion(ch1) - conversion(ch2);
	printf("%f",x * pow(2,con));
	return 0;
} 
题解2就是运用substr 和 find,思路相同
  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值