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#中实现这一点