【算法】 string 转 int
遇到的一道面试题, 当时只写了个思路, 现给出具体实现 ,算是一种比较笨的实现方式
public class StringToInt { /// <summary> /// 自己实现string转换成int /// </summary> /// <param name="str"></param> /// <returns></returns> public static int ToInt(string str) { if (string.IsNullOrWhiteSpace(str)) // 空字符串直接返回0 { return 0; } bool isMinus = false; // 是否是负数 int result = 0; // 返回结果 for (int i = 0; i < str.Length; i++) { int num = ToInt(str[i]); if (num == -1) // 不是数字 { return 0; } if (num == -2) // 负数的情况 { if (i == 0) // 确实是负数 { isMinus = true; } else // 字符串中间出现负号 { return 0; } } checked // 检查算术溢出 { result += ToTens(num, str.Length - i - 1); } } return isMinus ? 0 - result : result; } /// <summary> /// 将char转成int,注意-(负数),不能转的返回-1,负数返回-2 /// </summary> /// <param name="c"></param> /// <returns></returns> private static int ToInt(char c) { switch (c) { case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case '0': return 0; case '-': return -2; } return -1; } /// <summary> /// 根据位数获取对应的数字 /// </summary> /// <param name="i"></param> /// <param name="index"></param> /// <returns></returns> private static int ToTens(int i, int index) { if (i <= 0) { return 0; } for (int j = 0; j < index; j++) { i = i * 10; } return i; } }