如何将存储数字的char数组拼接并转换为int类型
错误原因
你触发System.FormatException的核心问题是提前修改了char数组的内容:
你代码中把原始数字字符数组的每个元素都做了digit[z] -= '0'处理,原始char数组存储的是'1'、'2'这类可识别的数字ASCII字符,减'0'后元素变为数值1、2对应的ASCII控制字符,已经不是合法的数字字符格式,所以直接调用int.Parse、string.Join拼接转换都会报错。
解决方案
在你标记的// number = ?????位置,用以下两种方案任选其一即可:
方案1:数学累加转换(不需要修改原有逻辑)
直接遍历处理后的数值型char数组,通过位权累加得到最终int值:
int res = 0; foreach (var num in digit) { res = res * 10 + num; } return res;
方案2:转回数字字符后用字符串转换
把每个元素加回'0'恢复为数字字符,再拼接转int:
var numStr = new string(digit.Select(x => (char)(x + '0')).ToArray()); return int.Parse(numStr);
额外优化建议
你可以直接删除提前做digit[z] -= '0'的循环:数字字符'0'~'9'的ASCII值是连续递增的,直接比较字符大小的结果和比较对应数值大小的结果完全一致,不影响你后续的排序、交换逻辑。删掉这个循环后,最后转换可以直接简化为:
return int.Parse(new string(digit));
内容的提问来源于stack exchange,提问作者Linascts
相关产品推荐
相关产品推荐

