蓝桥杯 内存空间 大模拟 c++

#include<bits/stdc++.h>

using namespace std;

const int MAXN=15;

long long sum = 0;
int lgth;
string str[MAXN];        

int put_ele(string st){
    int ele=0,pos,pos2,lg,total=0,ll=3,i;  
	
//int || long    
    if (st.substr(0,3)=="int") ele=4;
    
	else if (st.substr(0,4)=="long"){
        ele=8;ll=4;
    }
//数组   
	if ((ele==4 or ele==8)) {
        if (st[ll]=='['){
            string l=st.substr(ll+2,st.size()-ll-2);        
            while (l!=";"){         
                pos=l.find("[");      
                pos2=l.find("]");
                lg=atoi((l.substr(pos+1,pos2-pos)).c_str());
                total+=lg*ele;
                l=l.substr(l.find(']')+1,l.size()-l.find("]")+1);
            }
        }
//单个
        else{
            string l=st.substr(ll,st.size()-ll);    
            while (l!=";"){
                pos=l.find("=");        
                i=pos+1;
                while (l[i]!=',' and l[i]!=';') i++;
                total+=ele;
                l=l.substr(i,l.size()-i);
            }
        }
    }
 //字符  
    else if (st.substr(0,6)=="String"){
        string l=st.substr(6,st.size()-6);
        while (l!=";"){
            pos=l.find('"');        
            i=pos+1;
            while (l[i]!='"') i++;
            lg=i-pos-1;
            total+=lg;
            l=l.substr(i+1,l.size()-i-1);
        }
    }
    return total;
}


int main(){
    scanf("%d",&lgth);
    
	cin.get();
    
	for (int i=0;i<lgth;i++) getline(cin,str[i]);        
    
	for (int i=0;i<lgth;i++) sum+=put_ele(str[i]);
    
	if (sum/(1024*1024*1024)!=0) {
        cout<<sum/(1024*1024*1024)<<"GB";
        sum%=(1024*1024*1024);
    }
    if (sum/(1024*1024)!=0) {
        cout<<sum/(1024*1024)<<"MB";
        sum%=(1024*1024);
    }
    if (sum/1024!=0){
        cout<<sum/1024<<"KB";
        sum%=1024;
    }
    if (sum!=0) cout<<sum<<"B";
    
	return 0;
}

代码解释:

get.cin():为了吞掉多余的空行

num = atoi(str.substr(st,10).c_str)  substr(start,len)截取从start开始的len长度子串,返回子串,c_str将字串变成字符数组指针char*,atoi字符转化成数字。(对应的是itoa)

总结

字母,符号,数字交错关键是找到标记点,从哪里到哪里读入数字。

这道题结束标志就是“;”,数字标志就是“[ ]”或者“=”;

模拟题建议可以在草稿纸画好逻辑

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值