C# C语言中的itoa转换#

C# C语言中的itoa转换#,c#,C#,这是一个面试问题,要求我在不使用任何内置函数的情况下编写itoa转换 下面是我正在使用的算法。但是('0'+n%10)正在引发错误: 无法将字符串转换为int 私有静态字符串itoa(int n) { 字符串结果=string.Empty; 字符c; 布尔符号=n>0?真:假; while(true) { 结果=结果+('0'+n%10);//'0' n=n/10; 如果(n我不清楚为什么要这样做;只需调用整数即可。您可以使用各种重载指定所需的格式。我不清楚为什么要这样做;只需调用整数即可。您可

这是一个面试问题,要求我在不使用任何内置函数的情况下编写
itoa
转换

下面是我正在使用的算法。但是
('0'+n%10)正在引发错误:

无法将字符串转换为int

私有静态字符串itoa(int n)
{
字符串结果=string.Empty;
字符c;
布尔符号=n>0?真:假;
while(true)
{
结果=结果+('0'+n%10);//'0'
n=n/10;

如果(n我不清楚为什么要这样做;只需调用整数即可。您可以使用各种重载指定所需的格式。

我不清楚为什么要这样做;只需调用整数即可。您可以使用各种重载指定所需的格式。

我不清楚为什么要这样做;只需调用整数即可您可以使用各种重载指定所需的格式。

我不清楚您为什么要这样做;只需调用您的整数。您可以使用各种重载指定所需的格式。

('0'+n%10)
会产生一个
int
值,因此您应该将其转换回
char
。您的代码还存在一些其他问题,如在错误的一侧添加
-
符号、使用负值等

我的版本:

static string itoa(int n)
{
    char[] result = new char[11]; // 11 = "-2147483648".Length
    int index = result.Length;
    bool sign = n < 0;

    do
    {
        int digit = n % 10;
        if(sign)
        {
            digit = -digit;
        }
        result[--index] = (char)('0' + digit);
        n /= 10;
    }
    while(n != 0);

    if(sign)
    {
        result[--index] = '-';
    }

    return new string(result, index, result.Length - index);
}
静态字符串itoa(int n)
{
char[]result=新字符[11];//11=“-2147483648”。长度
int index=结果长度;
布尔符号=n<0;
做
{
整数位数=n%10;
如果(签名)
{
数字=-数字;
}
结果[--索引]=(字符)('0'+数字);
n/=10;
}
而(n!=0);
如果(签名)
{
结果[--指数]='-';
}
返回新字符串(result、index、result.Length-index);
}
('0'+n%10)
会产生一个
int
值,因此您应该将其转换回
char
。您的代码还有一些其他问题,例如在错误的一侧添加
-
符号、使用负值等

我的版本:

static string itoa(int n)
{
    char[] result = new char[11]; // 11 = "-2147483648".Length
    int index = result.Length;
    bool sign = n < 0;

    do
    {
        int digit = n % 10;
        if(sign)
        {
            digit = -digit;
        }
        result[--index] = (char)('0' + digit);
        n /= 10;
    }
    while(n != 0);

    if(sign)
    {
        result[--index] = '-';
    }

    return new string(result, index, result.Length - index);
}
静态字符串itoa(int n)
{
char[]result=新字符[11];//11=“-2147483648”。长度
int index=结果长度;
布尔符号=n<0;
做
{
整数位数=n%10;
如果(签名)
{
数字=-数字;
}
结果[--索引]=(字符)('0'+数字);
n/=10;
}
而(n!=0);
如果(签名)
{
结果[--指数]='-';
}
返回新字符串(result、index、result.Length-index);
}
('0'+n%10)
会产生一个
int
值,因此您应该将其转换回
char
。您的代码还有一些其他问题,例如在错误的一侧添加
-
符号、使用负值等

我的版本:

static string itoa(int n)
{
    char[] result = new char[11]; // 11 = "-2147483648".Length
    int index = result.Length;
    bool sign = n < 0;

    do
    {
        int digit = n % 10;
        if(sign)
        {
            digit = -digit;
        }
        result[--index] = (char)('0' + digit);
        n /= 10;
    }
    while(n != 0);

    if(sign)
    {
        result[--index] = '-';
    }

    return new string(result, index, result.Length - index);
}
静态字符串itoa(int n)
{
char[]result=新字符[11];//11=“-2147483648”。长度
int index=结果长度;
布尔符号=n<0;
做
{
整数位数=n%10;
如果(签名)
{
数字=-数字;
}
结果[--索引]=(字符)('0'+数字);
n/=10;
}
而(n!=0);
如果(签名)
{
结果[--指数]='-';
}
返回新字符串(result、index、result.Length-index);
}
('0'+n%10)
会产生一个
int
值,因此您应该将其转换回
char
。您的代码还有一些其他问题,例如在错误的一侧添加
-
符号、使用负值等

我的版本:

static string itoa(int n)
{
    char[] result = new char[11]; // 11 = "-2147483648".Length
    int index = result.Length;
    bool sign = n < 0;

    do
    {
        int digit = n % 10;
        if(sign)
        {
            digit = -digit;
        }
        result[--index] = (char)('0' + digit);
        n /= 10;
    }
    while(n != 0);

    if(sign)
    {
        result[--index] = '-';
    }

    return new string(result, index, result.Length - index);
}
静态字符串itoa(int n)
{
char[]result=新字符[11];//11=“-2147483648”。长度
int index=结果长度;
布尔符号=n<0;
做
{
整数位数=n%10;
如果(签名)
{
数字=-数字;
}
结果[--索引]=(字符)('0'+数字);
n/=10;
}
而(n!=0);
如果(签名)
{
结果[--指数]='-';
}
返回新字符串(result、index、result.Length-index);
}

正如@minitech所评论的,我们通常只使用
ToString()
在C#中实现。如果您真的想自己编写算法,下面是一个实现:

public static partial class TestClass {
    public static String itoa(int n, int radix) {
        if(0==n)
            return "0";

        var index=10;
        var buffer=new char[1+index];
        var xlat="0123456789abcdefghijklmnopqrstuvwxyz";

        for(int r=Math.Abs(n), q; r>0; r=q) {
            q=Math.DivRem(r, radix, out r);
            buffer[index-=1]=xlat[r];
        }

        if(n<0) {
            buffer[index-=1]='-';
        }

        return new String(buffer, index, buffer.Length-index);
    }

    public static void TestMethod() {
        Console.WriteLine("{0}", itoa(-0x12345678, 16));
    }
}
公共静态部分类TestClass{
公共静态字符串itoa(整数n,整数基数){
如果(0==n)
返回“0”;
var指数=10;
var buffer=新字符[1+索引];
var xlat=“0123456789abcdefghijklmnopqrstuvxyz”;
对于(int r=Math.Abs(n),q;r>0;r=q){
q=数学DivRem(r,基数,out r);
缓冲区[index-=1]=xlat[r];
}

如果(n如@minitech所评论的,我们通常只使用
ToString()
在C#中实现。如果您真的想自己编写算法,下面是一个实现:

public static partial class TestClass {
    public static String itoa(int n, int radix) {
        if(0==n)
            return "0";

        var index=10;
        var buffer=new char[1+index];
        var xlat="0123456789abcdefghijklmnopqrstuvwxyz";

        for(int r=Math.Abs(n), q; r>0; r=q) {
            q=Math.DivRem(r, radix, out r);
            buffer[index-=1]=xlat[r];
        }

        if(n<0) {
            buffer[index-=1]='-';
        }

        return new String(buffer, index, buffer.Length-index);
    }

    public static void TestMethod() {
        Console.WriteLine("{0}", itoa(-0x12345678, 16));
    }
}
公共静态部分类TestClass{
公共静态字符串itoa(整数n,整数基数){
如果(0==n)
返回“0”;
var指数=10;
var buffer=新字符[1+索引];
var xlat=“0123456789abcdefghijklmnopqrstuvxyz”;
对于(int r=Math.Abs(n),q;r>0;r=q){
q=数学DivRem(r,基数,out r);
缓冲区[index-=1]=xlat[r];
}

如果(n如@minitech所评论的,我们通常只使用
ToString()
在C#中实现。如果您真的想自己编写算法,下面是一个实现:

public static partial class TestClass {
    public static String itoa(int n, int radix) {
        if(0==n)
            return "0";

        var index=10;
        var buffer=new char[1+index];
        var xlat="0123456789abcdefghijklmnopqrstuvwxyz";

        for(int r=Math.Abs(n), q; r>0; r=q) {
            q=Math.DivRem(r, radix, out r);
            buffer[index-=1]=xlat[r];
        }

        if(n<0) {
            buffer[index-=1]='-';
        }

        return new String(buffer, index, buffer.Length-index);
    }

    public static void TestMethod() {
        Console.WriteLine("{0}", itoa(-0x12345678, 16));
    }
}
公共静态部分类TestClass{
公共静态字符串itoa(整数n,整数基数){
如果(0==n)
返回“0”;
var指数=10;
var buffer=新字符[1+索引];
var xlat=“0123456789abcdefghijklmnopqrstuvxyz”;
对于(int r=Math.Abs(n),q;r>0;r=q){
q=数学DivRem(r,基数,out r);
缓冲区[index-=1]=xlat[r];
}

如果(n如@minitech所评论的,我们通常只使用
ToString()
在C#中实现这一点