3.4.5 字符串与整数互转

  笔者给读者两个小任务,锻炼一下读者的思维能力,这对以后的编程是有好处的。
  小任务1:不使用强制类型转换操作把字符串转化为数字,比如把“-123”转化为-123(需要考虑正负数的情况)
  小提示:
  可以把字符减去'0'得到字符所代表的数字。比如'3'-'0'=3,也就实现了从代表数字的字符转化为了数字。
  可以考虑把单个数字乘以10的N次方累加的方法来得到一个数字。比如123=1*100+2*10+3*1。
  参考程序如下:

//不使用强制类型转换操作把字符串转化为数字
string s = "-0001234567890";    //在代码中考虑了正负数的情况
double iResult = 0//存放结果
int tmp = 1;    //输出前把结果乘以这个数用于处理正负数的情况
if (!char.IsNumber(s[0]))   //果字符串第一个字符不是数字
{
    
if (s.IndexOf('-'== 0)    //如果字符串第一个字符是'-'
    {
        s 
= s.TrimStart('-');   //去除第一个字符
        tmp = -1;   //结果乘以-1就得到了负数
    }

    
else if (s.IndexOf('+'== 0)   //如果字符串第一个字符是'+'
        s = s.TrimEnd('+'); //去除第一个字符'+'
    else
        
return//直接返回
}

for (int i = 0; i < s.Length; i++)
{
    
char c = s[i];  //得到当前字符
    int iCurrentNum = c - '0';  //把字符转化为整数
    iResult += iCurrentNum * Math.Pow(10, s.Length - i - 1);    //如果加上当前数字*10的N次方
    
//其实原理就是123=1*10的次方+2*10的一次方+3*10的次方
}

iResult 
*= tmp;
Console.WriteLine(iResult);

  小任务2:不使用强制类型转换操作把数字转化为字符串,比如把-123转化为“-123”(需要考虑正负数的情况)。
  小提示:
  可以考虑把数字除以10取余获得最后一位数字。比如123%10=3,则最后一位为3。取得最后一位后把数字减去最后一位然后再除以10,不断重复。比如(123-3)/10=12。第二次循环就从12中获取2这个数字。
  参考程序如下:
//不使用强制类型转换操作把数字转化字符串
int iNum = -123456//在代码中考虑正负数的情况
bool b = iNum < 0;  //是否负数
iNum *= b ? -1 : 1//是负数则转换为正数
string sResult = "";    //存放结果
while (iNum % 10 != 0)  //从最后一位开始逐一获得数字
{
    
int iCurrentNum = iNum % 10;    //取得当前数字,比如第一次数循环iCurrentNum=6,第二次循环iCureentNum=5
    sResult += iCurrentNum; //把数字加入字符串,比如第一次循环sResult=6,第二次循环sResult=65
    iNum -= iCurrentNum;    //减去当前数字,比如第一次循环iNum=123450,第二次循环iNum=12340
    iNum /= 10//除以10,比如第一次循环iNum=12345,第二次循环iNum=1234
}

//把字符串反转
char[] arr = sResult.ToCharArray(); //把字符串打为字符数组
sResult = "";   //清空字符串
for (int i = arr.Length - 1; i >= 0; i--)  //从最后一位开始逐一加入字符
    sResult += arr[i];
Console.WriteLine(b 
? "-" + sResult : sResult);
posted @ 2008-07-21 20:48  Jack.Net  阅读(634)  评论(0编辑  收藏  举报