当前位置:编程学习 > C#/ASP.NET >>

请实现一个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)
{
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;
}
--------------------编程问答-------------------- arr[i] != '\0'是说char型的数组arr里下标为i的元素不是'\0'。
for循环:只要i满足arr[i] != '\0'的条件就把变量result的值赋为10*result + arr[i]和字符0的差值,然后i值加1再次进入循环。 --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,