String to Integer 系列 1-4 (Append Code)

一系列编程题目,要求编写函数strToInt将字符串中的整数提取并转换,遵循不同的转换规则,禁止使用特定的库函数。题目涉及无符号十进制、带符号十进制、任意进制的转换,输出转换后的整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem A: 编写函数:String to Integer (I) (Append Code)
Time Limit: 1 Sec Memory Limit: 2 MB
Submit: 7908 Solved: 3992
[Submit][Status][Web Board]
Description

让我们来编写一个程序,按照指定的转换规则,把一个字符串里的整数提取出来。

编写函数strToInt():
原型:int strToInt(char str[]);
功能:按照指定的转换规则,把str[]中的串转换成整数,并返回,若str[]为空串,返回-1。
函数的调用格式见“Append Code”。

Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。
被禁用的库函数:sscanf()、atoi()、atof()、atol()、strtod()、strtold()、strtof()、strtol()、strtoul()等。

Input
输入是多行,每行一个字符串s,至EOF结束。每个串s不超过10个字符,并且s转换后的整数不会超出int类型的表示范围。
s的转换规则是:从第一个字符开始的前若干个连续数字字符(“0"~"9”)转换为一个无符号的十进制整数,直到第一个非数字字符为止。从第一个非数字字符开始,都是非法字符。因此,如果一个串全部都是非法字符,那么它只能是0。
Output
输出为多行,与输入对应。每行输出是串s转换后的一个整数。
Sample Input
123c
0123dd

-45ed
e1321
Sample Output
123
123
-1
0
0
HINT

“Append Code”中用到的头文件、全局变量或宏的定义应自行补充。

Append Code
append.c,

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_STR_LEN 11
int strToInt(char str[])
{
    int i,j,k=1,n=0;
    int a[11];
    if(strlen(str)==0)
        return -1;
    else
    {
        for(i=0;str[i]>=48&&str[i]<=57;i++);
        if(i==0)
            return 0;
        else
        {

            for(j=i-1;j>=0;j--)
            {
                n+=(str[j]-48)*k;
                k*=10;
            }
            return n;
        }
    }
}

int main()
{
    char s[MAX_STR_LEN];
    while(gets(s) != NULL)
        printf("%d\n", strToInt(s));
    return 0;
}

Problem B: 编写函数:String to Integer (II) (Append Code)
Time Limit: 1 Sec Memory Limit: 2 MB
Submit: 7557 Solved: 3560
[Submit][Status][Web Board]
Description

让我们来编写一个程序,按照指定的转换规则,把一个字符串里的整数提取出来。

编写函数strToInt():
原型:int strT

@Override public List<MyBatteryInfoEntity> queryInfo2Export(Map<String, Object> params) { String key = params.get("key")!=null?String.valueOf(params.get("key")):""; String deviceID = params.get("deviceId")!=null?String.valueOf(params.get("deviceId")):""; String starttime = params.get("starttime")!=null?String.valueOf(params.get("starttime")):""; String endtime = params.get("endtime")!=null?String.valueOf(params.get("endtime")):""; String startTime = StringUtils.isNotBlank(starttime)&&!"null".equals(starttime.trim())? DateUtils.format2(DateUtils.transferDateFormat(starttime),"yyyy-MM-dd HH:mm:ss"):""; String endTime =StringUtils.isNotBlank(endtime)&&!"null".equals(endtime.trim())?DateUtils.format2(DateUtils.transferDateFormat(endtime),"yyyy-MM-dd HH:mm:ss"):""; String sn = params.get("sn")!=null?String.valueOf(params.get("sn")):""; int project_id = params.get("projectId")!=null&&StringUtils.isNotBlank(String.valueOf(params.get("projectId")))? Integer.parseInt(String.valueOf(params.get("projectId"))):-1; int flag = params.get("flag")!=null&&StringUtils.isNotBlank(String.valueOf(params.get("flag")))? Integer.parseInt(String.valueOf(params.get("flag"))):-1; List<MyBatteryInfoEntity> result_list = myBatteryInfoDao.selectList(new QueryWrapper<MyBatteryInfoEntity>() .and(StringUtils.isNotBlank(key), qw->qw.like(StringUtils.isNotBlank(key), "battery_id", key) .or() .like(StringUtils.isNotBlank(key), "topic", key) .or() .like(StringUtils.isNotBlank(key), "battery_soft_version", key) ) .like(StringUtils.isNotBlank(deviceID),"battery_id",deviceID) .like(StringUtils.isNotBlank(sn), "sn", sn) .and(StringUtils.isNotBlank(startTime)||StringUtils.isNotBlank(endTime), qw->qw.ge(StringUtils.isNotBlank(startTime),"upload_time", startTime) .le(StringUtils.isNotBlank(endTime),"upload_time", endTime)) .eq(flag>0,"flag",flag) .eq(project_id>0,"project_id",project_id) .orderByAsc("upload_time")); // 状态转换等 if (result_list != null && result_list.size() > 0) { for (MyBatteryInfoEntity mtBatteryInfo : result_list) { // 电池状态 int btStatus = StringUtils.isNotBlank(mtBatteryInfo.getBatteryWorkMode())?Integer.parseInt(mtBatteryInfo.getBatteryWorkMode().trim()):0; String sysStatusValue = ""; if(btStatus>0) { if (btStatus == 16) { sysStatusValue = "充电("+btStatus+")"; } else if (btStatus == 1) { sysStatusValue = "放电("+btStatus+")"; } else if (btStatus == 33) { sysStatusValue = "搁置(保护-"+btStatus+")"; } else if (btStatus == 48) { sysStatusValue = "搁置(待机无输出-"+btStatus+")"; } else if (btStatus == 49) { sysStatusValue = "搁置(待机预放电-"+btStatus+")"; } else if (btStatus == 255) { sysStatusValue = "搁置(故障需返厂-"+btStatus+")"; } } mtBatteryInfo.setBatteryWorkModeValue(sysStatusValue); // 故障信息 if(StringUtils.isNotBlank(mtBatteryInfo.getBatteryErrorCode())){ StringBuffer errCodeValue = new StringBuffer(); // mtBatteryInfo.getBatteryErrorCode()分成3段 long errCode1 = Long.parseLong(mtBatteryInfo.getBatteryErrorCode().substring(0, 8), 16); long errCode2 = Long.parseLong(mtBatteryInfo.getBatteryErrorCode().substring(8, 16), 16); long errCode3 = Long.parseLong(mtBatteryInfo.getBatteryErrorCode().substring(16, 24), 16); String fault = "正常"; if(errCode1>0){ fault = "故障中"; if(Utility.analyseCode(errCode1,0)){ errCodeValue.append("电芯过压1级&"); } if(Utility.analyseCode(errCode1,1)){ errCodeValue.append("电芯过压2级&"); } if(Utility.analyseCode(errCode1,2)){ errCodeValue.append("电芯过压3级&"); } if(Utility.analyseCode(errCode1,3)){ errCodeValue.append("电芯过压4级&"); } if(Utility.analyseCode(errCode1,4)){ errCodeValue.append("整包过压1级&"); } if(Utility.analyseCode(errCode1,5)){ errCodeValue.append("整包过压2级&"); } if(Utility.analyseCode(errCode1,6)){ errCodeValue.append("整包过压3级&"); } if(Utility.analyseCode(errCode1,7)){ errCodeValue.append("充电器过压1级&"); } if(Utility.analyseCode(errCode1,8)){ errCodeValue.append("电芯欠压1级&"); } if(Utility.analyseCode(errCode1,9)){ errCodeValue.append("电芯欠压2级&"); } if(Utility.analyseCode(errCode1,10)){ errCodeValue.append("电芯欠压3级&"); } if(Utility.analyseCode(errCode1,11)){ errCodeValue.append("电芯欠压4级&"); } if(Utility.analyseCode(errCode1,12)){ errCodeValue.append("整包欠压1级&"); } if(Utility.analyseCode(errCode1,13)){ errCodeValue.append("整包欠压2级&"); } if(Utility.analyseCode(errCode1,14)){ errCodeValue.append("整包欠压3级&"); } if(Utility.analyseCode(errCode1,15)){ errCodeValue.append("整包欠压4级&"); } if(Utility.analyseCode(errCode1,16)){ errCodeValue.append("充电过流1级&"); } if(Utility.analyseCode(errCode1,17)){ errCodeValue.append("充电过流2级&"); } if(Utility.analyseCode(errCode1,18)){ errCodeValue.append("充电过流3级&"); } // if(Utility.analyseCode(errCode1,19)){ // errCodeValue.append("回馈过流1级&"); // } if(Utility.analyseCode(errCode1,20)){ // errCodeValue.append("回馈过流2级&"); // } if(Utility.analyseCode(errCode1,21)){ // errCodeValue.append("回馈过流3级&"); // } if(Utility.analyseCode(errCode1,22)){ // errCodeValue.append("回馈过流4级&"); // } if(Utility.analyseCode(errCode1,19)){ errCodeValue.append("充电过流4级&"); } if(Utility.analyseCode(errCode1,20)){ errCodeValue.append("回馈过流1级&"); } if(Utility.analyseCode(errCode1,21)){ errCodeValue.append("回馈过流2级&"); } if(Utility.analyseCode(errCode1,22)){ errCodeValue.append("回馈过流3级&"); } if(Utility.analyseCode(errCode1,23)){ errCodeValue.append("充电过流锁死1级&"); } if(Utility.analyseCode(errCode1,24)){ errCodeValue.append("放电过流1级&"); } if(Utility.analyseCode(errCode1,25)){ errCodeValue.append("放电过流2级&"); } if(Utility.analyseCode(errCode1,26)){ errCodeValue.append("放电过流3级&"); } if(Utility.analyseCode(errCode1,27)){ errCodeValue.append("放电过流4级&"); } if(Utility.analyseCode(errCode1,28)){ errCodeValue.append("放电过流5级&"); } if(Utility.analyseCode(errCode1,29)){ errCodeValue.append("放电过流6级&"); } if(Utility.analyseCode(errCode1,30)){ errCodeValue.append("放电过流7级&"); } if(Utility.analyseCode(errCode1,31)){ errCodeValue.append("放电过流锁死1级&"); } } if(errCode2>0){ fault = "故障中"; if(Utility.analyseCode(errCode2,0)){ errCodeValue.append("辅源短路1级&"); } if(Utility.analyseCode(errCode2,1)){ errCodeValue.append("预放超时1级&"); } if(Utility.analyseCode(errCode2,2)){ errCodeValue.append("预放锁死1级&"); } // if(Utility.analyseCode(errCode2,3)){ // errCodeValue.append("电芯过压4级&"); // } if(Utility.analyseCode(errCode2,4)){ // errCodeValue.append("整包过压1级&"); // } if(Utility.analyseCode(errCode2,5)){ // errCodeValue.append("整包过压2级&"); // } if(Utility.analyseCode(errCode2,6)){ // errCodeValue.append("整包过压3级&"); // } if(Utility.analyseCode(errCode2,7)){ // errCodeValue.append("整包过压4级&"); // } if(Utility.analyseCode(errCode2,8)){ errCodeValue.append("电芯充电高温1级&"); } if(Utility.analyseCode(errCode2,9)){ errCodeValue.append("电芯充电高温2级&"); } if(Utility.analyseCode(errCode2,10)){ errCodeValue.append("电芯充电低温1级&"); } if(Utility.analyseCode(errCode2,11)){ errCodeValue.append("电芯充电低温2级&"); } if(Utility.analyseCode(errCode2,12)){ errCodeValue.append("充电MOS高温1级&"); } if(Utility.analyseCode(errCode2,13)){ errCodeValue.append("充电MOS高温2级&"); } if(Utility.analyseCode(errCode2,14)){ errCodeValue.append("充电防反MOS高温1级&"); } if(Utility.analyseCode(errCode2,15)){ errCodeValue.append("充电防反MOS高温2级&"); } if(Utility.analyseCode(errCode2,16)){ errCodeValue.append("电芯放电高温1级&"); } if(Utility.analyseCode(errCode2,17)){ errCodeValue.append("电芯放电高温2级&"); } if(Utility.analyseCode(errCode2,18)){ errCodeValue.append("电芯放电低温1级&"); } if(Utility.analyseCode(errCode2,19)){ errCodeValue.append("电芯放电低温2级&"); } if(Utility.analyseCode(errCode2,20)){ errCodeValue.append("放电MOS高温1级&"); } if(Utility.analyseCode(errCode2,21)){ errCodeValue.append("放电MOS高温2级&"); } // if(Utility.analyseCode(errCode2,22)){ // errCodeValue.append("回馈过流4级&"); // } if(Utility.analyseCode(errCode2,23)){ // errCodeValue.append("充电过流锁死1级&"); // } if(Utility.analyseCode(errCode2,24)){ errCodeValue.append("均衡温度保护1级&"); } if(Utility.analyseCode(errCode2,25)){ errCodeValue.append("均衡温度保护2级&"); } if(Utility.analyseCode(errCode2,26)){ errCodeValue.append("辅源高温保护1级&"); } if(Utility.analyseCode(errCode2,27)){ errCodeValue.append("辅源低温保护1级&"); } // if(Utility.analyseCode(errCode2,28)){ // errCodeValue.append("放电过流5级&"); // } if(Utility.analyseCode(errCode2,29)){ // errCodeValue.append("放电过流6级&"); // } if(Utility.analyseCode(errCode2,30)){ // errCodeValue.append("放电过流7级&"); // } if(Utility.analyseCode(errCode2,31)){ // errCodeValue.append("放电过流锁死1级&"); // } } if(errCode3>0){ fault = "故障中"; if(Utility.analyseCode(errCode3,0)){ errCodeValue.append("充电MOS短路1级&"); } if(Utility.analyseCode(errCode3,1)){ errCodeValue.append("放电MOS短路1级&"); } if(Utility.analyseCode(errCode3,2)){ errCodeValue.append("NTC失效1级&"); } if(Utility.analyseCode(errCode3,3)){ errCodeValue.append("电芯采集断线1级&"); } if(Utility.analyseCode(errCode3,4)){ errCodeValue.append("电芯失衡1级&"); } if(Utility.analyseCode(errCode3,5)){ errCodeValue.append("电芯欠压失效1级&"); } if(Utility.analyseCode(errCode3,6)){ errCodeValue.append("AFE故障1级&"); } if(Utility.analyseCode(errCode3,7)){ errCodeValue.append("放电MOS断路1级&"); } if(Utility.analyseCode(errCode3,8)){ errCodeValue.append("FUSE熔断1级&"); } } if(fault.length()>0) { mtBatteryInfo.setBatteryErrorCodeValue(fault); } if(errCodeValue.length()>0) { mtBatteryInfo.setBatteryErrorCodeDetails(errCodeValue.toString().substring(0, errCodeValue.length() - 1)+"("+mtBatteryInfo.getBatteryErrorCode()+")"); }else{ mtBatteryInfo.setBatteryErrorCodeDetails("正常"); } } // Mos管状态 // bit4:均衡管状态( 0关闭, 1 有均衡管开启 // bit3:预放电 MOS 状态(0 关闭, 1 开启) // bit2:充电 MOS 状态0 关闭, 1 开启) // bit1:放电 MOS 状态0 关闭, 1 开启) // bit0:备用 long mosCode = mtBatteryInfo.getMosStatus()!=null?mtBatteryInfo.getMosStatus():0; StringBuffer mosCodeValue = new StringBuffer(); if(mosCode>=0){ if(Utility.analyseCode(mosCode,1)){ mosCodeValue.append("放电MOS状态:开启&"); mtBatteryInfo.setDischargeMosStatusValue("开启"); }else{ mosCodeValue.append("放电MOS状态:关闭&"); mtBatteryInfo.setDischargeMosStatusValue("关闭"); } if(Utility.analyseCode(mosCode,2)){ mosCodeValue.append("充电MOS状态:开启&"); mtBatteryInfo.setChargeMosStatusValue("开启"); }else{ mosCodeValue.append("充电MOS状态:关闭&"); mtBatteryInfo.setChargeMosStatusValue("关闭"); } if(Utility.analyseCode(mosCode,3)){ mosCodeValue.append("预放电MOS状态:开启&"); mtBatteryInfo.setPreDischargeMosStatusValue("开启"); }else{ mosCodeValue.append("预放电MOS状态:关闭&"); mtBatteryInfo.setPreDischargeMosStatusValue("关闭"); } if(Utility.analyseCode(mosCode,4)){ mosCodeValue.append("均衡管状态:开启&"); mtBatteryInfo.setBalanceTubeStateValue("开启"); }else{ mosCodeValue.append("均衡管状态:关闭&"); mtBatteryInfo.setBalanceTubeStateValue("关闭"); } } if(mosCodeValue.length()>0) { mtBatteryInfo.setMosStatusValue(mosCodeValue.toString().substring(0, mosCodeValue.length()-1)); } // 1:GPS标准坐标(wgs84); // 2:搜狗地图坐标; // 3:火星坐标(gcj02),即高德地图、腾讯地图和MapABC等地图使用的坐标; // 4:3中列举的地图坐标对应的墨卡托平面坐标; // 5:百度地图采用的经纬度坐标(bd09ll); // 6:百度地图采用的墨卡托平面坐标(bd09mc); // 7:图吧地图坐标; // 8:51地图坐标; String locationMode = ""; if(StringUtils.isNotBlank(mtBatteryInfo.getLocationMode())){ int modeNum = Integer.parseInt(mtBatteryInfo.getLocationMode().trim()); if(modeNum==1){ locationMode = "GPS标准坐标(wgs84)"; }else if (modeNum==2){ locationMode = "搜狗地图坐标"; }else if (modeNum==3){ locationMode = "火星坐标(gcj02)"; }else if (modeNum==4){ locationMode = "3中列举的地图坐标对应的墨卡托平面坐标"; }else if (modeNum==5){ locationMode = "百度地图采用的经纬度坐标(bd09ll)"; }else if (modeNum==6){ locationMode = "百度地图采用的墨卡托平面坐标(bd09mc)"; }else if (modeNum==7){ locationMode = "图吧地图坐标"; }else if (modeNum==8){ locationMode = "51地图坐标"; }else{ locationMode = ""; } } mtBatteryInfo.setLocationModeValue(StringUtils.isNotBlank(locationMode)?locationMode:"GPS标准坐标(wgs84)"); } } return result_list; } 使用多线程分批查询,循环也要优化,帮我优化整个代码,太慢了
最新发布
07-15
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值