当前读到的值为12.02.00.001,需要做去0操作使得值变为12.2.0.1
如果用遍历去0结果就会变成12.2..1
好兄弟这个如何解决呀
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的字符串包括数字字母符号,可以为空。
示例:
输入:"+2147483647"
输出:“2147483647”
分析:
字符串当中可能包含数字、字母和其他符号,正数可以在前面放上正号,由此可以确定的是,一个字符串一个合法的数值,则除了其第一个字符可能是正号或负号以外,其他字符都应该是数字字符。
步骤:
1、先判断除第一个字符以外的字符,若是其中出现了非数字字符的字符,则该字符串非法,否则我们计算出其转换为整数后的数值。
2、再判断第一个字符,若是正号,则当前整数的正值;若是负号,则返回当前整数的负值;若还是数字字符,则再次更新当前整数的数值并返回;若第一个字符不属于这三种情况,则说明该字符串还是非法的。
代码:
class Solution {
public:
int StrToInt(string str) {
if (str.size() == 0) //空字符串,返回0
return 0;
int start = 0; //头指针指向第一个字符
int end = str.size() - 1; //尾指针指向最后一个字符
int ret = 0; //字符串转换为整数后的结果
int i = 1; //标识十进制当前位的权重(当前为个位,权重为1)
while (start < end) //判断第一个字符之后的字符
{
if (str[end] < '0' || str[end] > '9') //若不是数字,则非法
{
return 0;
}
ret += i*(str[end] - '0'); //ret更新
i *= 10; //下一位权重增大十倍
end--; //继续判断
}
//判断第一个字符
if (str[end] >= '0' && str[end] <= '9') //是数字
return ret + i*(str[end] - '0'); //再次更新ret并返回正值
if (str[end] == '+') //标识正数
return ret; //返回正值
if (str[end] == '-') //标识负数
return -ret; //返回负值
return 0; //第一个字符不是数字、+、-当中的一个,则还是非法
}
};
可以使用字符串的split方法将原字符串按"."进行分割,然后逐个处理每个分割出来的字符串,去掉前面的"0",再将处理后的字符串拼接成新的字符串即可。代码示例如下:
def remove_zero(s):
# 按"."进行分割
lst = s.split('.')
# 处理每个分割出来的字符串
for i in range(len(lst)):
if lst[i].startswith('0'):
# 去掉前面的"0"
lst[i] = str(int(lst[i]))
# 拼接处理后的字符串
return '.'.join(lst)
s = '12.02.00.001'
print(remove_zero(s)) # 输出 12.2.0.1
另外,由于此处的字符串处理较为简单,也可以使用正则表达式进行匹配和替换操作,代码示例如下:
import re
def remove_zero(s):
# 使用正则表达式进行匹配和替换操作
return re.sub(r'\b0+(\d)', r'\1', s)
s = '12.02.00.001'
print(remove_zero(s)) # 输出 12.2.0.1
上述正则表达式\b0+(\d)
表示匹配以单词边界开头,后面跟着1个或多个0,然后是1个数字的情况,将匹配到的0替换为空字符串,从而达到去除0的效果。
按 【.】分割替换0为空字符串,再加个判断如果替换后整个字符串变空了,则补个0
遍历也可以实现去0,重点是如何判断当前这个0是否需要去掉,所以可以考虑将字符串按照“.”进行分割来去0。只需要判断被分割的字符串长度及是否是0即可,参考如下
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input = "12.02.00.001";
string output = "";
string delimiter = ".";
size_t pos = 0;
string token;
//进行字符串分割
while ((pos = input.find(delimiter)) != string::npos) {
token = input.substr(0, pos);
if (token.size() > 1 && token[0] == '0') {
token = token.substr(1);
}
output += token + delimiter;
input.erase(0, pos + delimiter.length());
}
if (input.size() > 1 && input[0] == '0') {
input = input.substr(1);
}
output += input;
cout << output << endl;
return 0;
}
希望能帮到你,加油~~~
按点号分割字符串转int再拼起来,转int失败就直接为0