c# - 在不使用乘法 C# 的情况下将字符串转换为整数
问题描述
有没有一种方法可以在不使用乘法的情况下将字符串转换为整数。int.Parse() 的实现也使用乘法。我还有其他类似的问题,您可以手动将字符串转换为 int,但这也需要将数字乘以 10。这是我在一次采访中遇到的面试问题,我似乎找不到任何答案。
解决方案
如果您假设一个基数为 10 的数字系统并用位移代替乘法(参见此处),这可以是正整数的解决方案。
public int StringToInteger(string value)
{
int number = 0;
foreach (var character in value)
number = (number << 1) + (number << 3) + (character - '0');
return number;
}
请参阅ideone上的示例。
唯一的假设是字符'0'
在'9'
字符集中直接相邻。使用 将数字字符转换为它们的整数值character - '0'
。
编辑:
对于负整数,这个版本(见这里)有效。
public static int StringToInteger(string value)
{
bool negative = false;
int i = 0;
if (value[0] == '-')
{
negative = true;
++i;
}
int number = 0;
for (; i < value.Length; ++i)
{
var character = value[i];
number = (number << 1) + (number << 3) + (character - '0');
}
if (negative)
number = -number;
return number;
}
一般来说,您应该考虑错误,例如空检查、其他非数字字符的问题等。
推荐阅读
- javascript - 如何在 React with Jest(无酶)中测试功能组件的状态
- mysql - Springboot + JPA:捕获 DataIntegrityViolationException 与检查 COUNT(field)
- android - Android 中的 Mapbox 热图取决于功能属性
- ios - 在应用程序中注入依赖项后,如何防止 ViewController 被释放:DidFinishLaunchingWithOptions:
- python - 在字符串上使用 exec 在函数中定义函数
- openssl - openssl s_client -showcerts -servername xyz -connect xyz:443 挂了很久
- excel - 如何将一张纸中的特定范围值粘贴/均衡到另一张纸中?
- java - 如何为 Postgresql ->> 运算符创建谓词
- html - 使用要转换的html字符串时,JSPDF pdf内容为空
- php - 一种输入类型中的两个值=文本