| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 405 人关注过本帖
标题:这个C语言里面有点地方不太明白~谁能告诉下~详细点好
只看楼主 加入收藏
q410515121
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-3-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
这个C语言里面有点地方不太明白~谁能告诉下~详细点好
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 8
int xx[M];
int proc(char *str,int x,int y)
{
     int sum;
     int i=0;
     char *p=str;
     for(i=0;i<M;i++)
        xx[i]=0;
     sum=*p-'0';         /*就是这,*p指向的是字符串第一个字符吧?那*p-‘0’得到的是什么结果呢?*/
     p++;
     while(*p)
     {
        sum=sum*x+*p-'0';      /*同样看不懂~书上解释是将字符串转为int型数据,看不太明白额*/

        p++;
     }
     i=0;
     while(sum!=0)
     {
        xx[i]=sum%y;
        sum=sum/y;
        i++;
     }
     return i;
}

void main()
{
     char str[6];
     int i;
     int n;
     int x;
     int y;
     printf("Enter a string made up of '0' to '9' digits character:");
     gets(str);
     if(strlen(str)>5)
     {
        printf("Error:string too longer!,please input again!\n\n");
        exit(0);
     }
     for(i=0;str[i];i++)
        if(str[i]<'0'||str[i]>'9')
        {
            printf("Error:%c not is '0' to '9' digits character!\n\n",str[i]);
            exit(0);
        }
     printf("The original string: ");
     puts(str);
     printf("\nINPUT x= ");
     scanf("%d",&x);
     printf("\nINPUT y= ");
     scanf("%d",&y);
     n=proc(str,x,y);
     printf("\n%s is convered to",str);
     for(i=n-1;i>=0;i--)
        printf("%d",xx[i]);
}
搜索更多相关主题的帖子: C语言 
2010-03-18 13:38
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:10 
我这样说吧:0+48=='0'   1+48=='1'.....

简单的生活
2010-03-18 13:42
q410515121
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-3-18
收藏
得分:0 
以下是引用smltq在2010-3-18 13:42:55的发言:

我这样说吧:0+48=='0'   1+48=='1'.....
你是说的对应的ASCII代码是吧?可是那么理解p-'0'对于整个程序有什么用途呢?SUM=SUM*X+P-'0'为什么是转换成int型的啊??谢谢,帮忙解释下。。。

说明下,这个程序的作用是字符串由数字组成(不超过五位),可以看做任何进制的数,二PORE函数的功能是吧字符串转换成任意进制的数,结果保存在数组XX中,有函数返回转换后数组XX的实际长度。其中X表示str原来的进制,y表示要转换成德进制。列入,输入str=“1011’,x=2,y=10.结果输出11

[ 本帖最后由 q410515121 于 2010-3-18 14:00 编辑 ]
2010-03-18 13:53
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:10 
比如说你输入一个字符'5'(可用%c打印显示出来), 我们知道它的ASCII码是48+5(可用%d打印出来查看),然而程序是要使用的是数字5,如果直接使用它的值的话显然是不对的,
那么就要进行转换,于是就有了*p - '0'得到我们见到的我们想要的值5
转换成int型是为了计算新进制各位的数,当然如果数不是很大的话用char或short也是完全可以的
2010-03-18 14:19
快速回复:这个C语言里面有点地方不太明白~谁能告诉下~详细点好
数据加载中...
 
   



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

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