| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3535 人关注过本帖
标题:各位大神,怎样将输入的字符串,以整数的形式输出呢?
只看楼主 加入收藏
怎么会这样子
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:31
专家分:39
注 册:2011-8-20
收藏
得分:1 
4楼更简单!
4+++

这才是厉害!
2011-09-18 11:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
字符串形式储存的数据,关键是看数据声明。char[] = "-1234",表明这是一个char数组,那么就要明白char是什么,这是一条解题的路线,你遇到问题,就要养成这样求解的习惯。一种数据类型,要么是语言内定的,要么是编程者自己构造,这点你要识别得出来。在这里,char是C语言的内置数据类型,由C语言法则规定,知道这点之后,就要调动记忆,检索char到底是怎样的概念,如果不清楚,就拿起书本复习。

在C语言中,char本质上是整数,而且是特别的整数,它是一个8位二进制整数。当某个数据被声明是char类型的时候,意思是指这个整数视为某个字符的编码,与你的学号一样,学号代表你的信息,字符的编码也代表某个具体字符的信息(顺序、字型、意义等等)。世界上有很多种编码体系,对ASCII码而言,字符'0'的编码是整数48,而且该编码方案规定,后续的'1'、'2'……是依次加1的整数(千万注意:ASCII码不是唯一的编码体系,C语言并不规定char必然采用ASCII编码体系,这与你所使用的编译器有关,它与你所在的地区的编码习惯关联,甚至,你完全可以采用自己独特的编码体系)。按照ASCII编码的约定,字符'1'的内码49比字符'0'的内码48大1,恰好是十进制数字1的值,很容易推演出'9'-'0'=9也是十进制数字9。这样,我们就可以通过内码减法来将字符转换为数值,这就是字符与数值之间互相转换的原理。

对字符串"-1234",你所需要的仅仅是分析出数组中最后的字符'4'是个位数、前一个是十位数这样的规律,那么你的编程,不过是考虑如何知道数组中某个字符是第几位数,对个位数就用它的内码乘以1、对十位数就用它的内码乘以10、对百位数就用它的内码乘以100,这里很明显有一种循环递增规律,找到这种规律,就能对任意位数的字符串进行转换。但你要注意,分析最前面的'-'号,那绝对影响转换结果。必须先把正负号判断好了,然后才能在不考虑符号的基础上进行转换。

编程,你要考虑的就是类似这样的东西。当你得到的字符串数字格式有点特异时(比如"-1,234"这样格式化了的数据),无法直接使用库函数转换,就得懂如何自己设计转换,这才是学编程的核心思想,最起码要了解如何才能做到,具体的实现做不出来没问题,但原理上你是知道一定可以的,那么若你手下某个程序员要耍滑头说做不来,直接叫他滚蛋就能唬住他,吓不倒你,死的只是他自己——将军难找,小兵多的是,他们没什么优势。

这种思维方式是你必须学会的。当给出的字符串不是十进制的时候,比如是十六进制,那么你就无法再用'A'-'0'来直接运算了,但知道原理,这根本难不倒你。对任何进制的转换,都难不倒你。因此,你不要以为知道atoi()之类的函数就算学会了编程、懂C语言了,不是那样的。

顺便提醒一下:C语言的char是一个8位二进制整数,但C#的Char是16位的。奉劝那些喜欢固定化数据尺寸的朋友,不要养成依赖太多假定的习惯。ASCII编码,不是唯一可能的C类char编码,写'1'-'0'就好,不要写'1'-48,这是很隐蔽的错误陷阱。不要看到人家说很厉害的代码就盲目相信,事实未必如此。

[ 本帖最后由 TonyDeng 于 2011-9-18 13:33 编辑 ]
收到的鲜花
  • A134337580722011-09-18 21:49 送鲜花  5朵   附言:辛苦费

授人以渔,不授人以鱼。
2011-09-18 12:29
柒月贰
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2011-9-17
收藏
得分:1 
求教了   , 我是酱油男
2011-09-18 12:45
杨茂
Rank: 1
等 级:新手上路
帖 子:21
专家分:1
注 册:2011-9-16
收藏
得分:0 
回复 12楼 TonyDeng
谢谢您的指导,本人感受颇深,学习C语言一定得了解C语言的本质,主动思考,而不是依靠某个函数实现程序功能,字符串转换成整数最重要的本质是知道字符9-字符0的概念,两者之差即为十进制整数,反而字符A-字符Z,则不能这样使用。以后请多帮助咯。嘿嘿。。。
2011-09-18 12:51
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:1 
自己实现转换功能

double CharToNum(const string c)
{
    int i=0;
    double t=1.0,sum=0.0;
    bool value=true;//正数为真,负数为假
    if(c[i]=='-')
    {
        value=false;
        i++;
    }
    while(c[i]!='\0')
    {
        if(c[i]=='.')
        {
            t=0.1;
            i++;
            while(c[i]!='\0')
            {
                sum=sum+(c[i++]-'0')*t;
                t/=10;
            }
            continue;
        }
        sum=t*sum+(c[i]-'0');
        t*=10;
        i++;
    }
    return value==true?sum:-sum;
}
2011-09-18 17:34
快速回复:各位大神,怎样将输入的字符串,以整数的形式输出呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012351 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved