请实现一个Int.Parse()方法,只考虑正整数
int intParse(char arr[])
{
int result = 0;
for(int i = 0; arr[i] != '\0'; i++)
{
result = 10 * result + (arr[i] - '0');
}
return result;
}
arr[i] != '\0';这个不知道是什么意思,有什么作用?
整个for循环代码就没看明白,希望有人讲解一下!
是如何实现Int.Parse() --------------------编程问答-------------------- '\0'代表数组结束
如果向此方法传递参数 new []{'2','1','\0','1'}
结果为整数21
result = 10 * result + (arr[i] - '0');
这句话的意思是 result的植乘以10 再加上字符arr[i]与字符'0'的ascII值的差
如:'9'-'0'=9 --------------------编程问答-------------------- for(int i = 0; i<arr.length; i++)
{
}
判断是否结束
--------------------编程问答-------------------- http://blog.csdn.net/wuyazhe/archive/2010/06/24/5692560.aspx
using System;
namespace CSharpConsole01
{
public static class ExternClass
{
public static int MyParse(this string text)
{
text = text.PadLeft(10, '0');
if (text[0] < '0' || text[0] > '9' ||
text[1] < '0' || text[1] > '9' ||
text[2] < '0' || text[2] > '9' ||
text[3] < '0' || text[3] > '9' ||
text[4] < '0' || text[4] > '9' ||
text[5] < '0' || text[5] > '9' ||
text[6] < '0' || text[6] > '9' ||
text[7] < '0' || text[7] > '9' ||
text[8] < '0' || text[8] > '9' ||
text[9] < '0' || text[9] > '9')
{
throw new FormatException();
}
return (text[0] - '0') * 1000000000 +
(text[1] - '0') * 100000000 +
(text[2] - '0') * 10000000 +
(text[3] - '0') * 1000000 +
(text[4] - '0') * 100000 +
(text[5] - '0') * 10000 +
(text[6] - '0') * 1000 +
(text[7] - '0') * 100 +
(text[8] - '0') * 10 +
(text[9] - '0');
}
}
class Program
{
[STAThreadAttribute]
static void Main(string[] args)
{
Random rnd = new Random(Environment.TickCount);
string[] list = new string[10000];//生成10000个测试数据
int[] myparse = new int[10000];
int[] sysparse = new int[10000];
for (int i = 0; i < 10000; i++) list[i] = rnd.Next(0, int.MaxValue).ToString();
//MyParse
int tick1 = Environment.TickCount;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 10000; j++)
{
myparse[j] = list[j].MyParse();
}
}
tick1 = Environment.TickCount - tick1;
int tick2 = Environment.TickCount;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 10000; j++)
{
sysparse[j] = int.Parse(list[j]);
//int.TryParse(list[j], out sysparse[j]);
}
}
tick2 = Environment.TickCount - tick2;
Console.WriteLine("MyParse:" + tick1.ToString());
Console.WriteLine("int.Parse:" + tick2.ToString());
Console.ReadKey();
}
}
}
运行结果
MyParse:3986
int.Parse:5157
--------------------编程问答-------------------- 用循环会需要创建临时变量,不用就块多了。 --------------------编程问答-------------------- '\0' 的意思是空字符的意思 判断当遇到你的字符数组的项不是空字符的时候 执行循环体 --------------------编程问答-------------------- c风格的字符串的话会以'\0'结尾. --------------------编程问答-------------------- //给方法传参,参数char类型数组arr
int intParse(char arr[])
{
//定义结果变量,赋初值为0
int result = 0;
//内部循环,i从0到数组末尾遍历,写法同i<arr.Length
for(int i = 0; arr[i] != '\0'; i++)
{
//进行计算
result = 10 * result + (arr[i] - '0');
}
//返回结果
return result;
} --------------------编程问答--------------------
private int IntParse(string s)--------------------编程问答-------------------- arr[i] != '\0'是说char型的数组arr里下标为i的元素不是'\0'。
{
int result = 0;
int n = 0;
for (int i = s.Length - 1; i >= 0; i--)
{
result = result + ((int)s[i] - 48) * (int)Math.Pow(10, n);
n++;
}
return result;
}
for循环:只要i满足arr[i] != '\0'的条件就把变量result的值赋为10*result + arr[i]和字符0的差值,然后i值加1再次进入循环。 --------------------编程问答--------------------
补充:.NET技术 , C#