| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 424 人关注过本帖
标题:求两句子的解释
只看楼主 加入收藏
xdyuan33
Rank: 3Rank: 3
来 自:广西大学化工学院
等 级:论坛游侠
帖 子:146
专家分:145
注 册:2009-7-24
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:3 
求两句子的解释
输入一字符串,内有数字和非数字,如:a1234x456-\a124dkk      将其中连续的数字作作为一个整数,
依次放到一数组a,如将功赎罪1234,456,124分别放到a[0],a[1],a[2]中,统计有多少个新的整数并输出。
(很郁闷,那个减去48到底是什么意思?)
#include <stdio.h>
main()
{
  char str[50],*pstr;
  int i,j,m,e10,digit,ndigit,a[10],*pa;
  printf("\nInput a string :\n");
  gets(str);
  printf("\n");
  pstr=str;      
  pa=a;
  ngigit=0;    /*统计多少个新的整数*/
  i=0;          /*代表字符串中字符的位置*/
  j=0;          /*代表连续数字的位数*/
  while(*(pstr+i)!='\0')
   {if((*(pstr+i)>='0'&&*(pstr+i)<='9'))
       j++;
    else
      {if(j>0)
        {digit=*(pstr+i-1)-48;      /*将个数位赋予 digit*/
             k=1;
          while(k<j)                    /*将含有两位以上数的其他位的数值累计到 digit*/
           {e10=1;
            for(m=1;m<=k;m++)
               e10=e10*10;             /*e10代表该位数所应乘的因子*/
            digit=digit+(*(pstr+i-1-k)-48)*e10;      /*将该位数的数值累加到 digit*/
                k++;           /*位数自加*/
            }
          *pa=digit;      /*将数值赋予数组a*/
          ndigit++;      
          pa++;          /*指针指向数组下一元素*/
          j=0;
        }
      }
    i++;
   }
  if(j>0)                              /*以数字结尾字符串的最后一个数据*/
   {digit=*(pstr+i-1)-48;      /*将个数位赋予digit*/
    k=1;
    while(k<j)                   /*将含有两位以上数的其他位的数值累计到 digit*/
     {e10=1;
       for(m=1;m<=k;m++)
        e10=e10*10;             /*e10代表该位数所应乘的因子*/
       digit=digit+(*(pstr+i-1-k)-48)*e10;       /*将该位数的数值累加到 digit*/
        k++;
      }
    *pa=digit;             /*将数值赋予数组a*/
    ngigit++;              /*指针指向数组下一元素*/
    j=0;      
   }
  printf("There are %d numbers in this line.They are :\n",ndigit);
  j=0;
  pa=a;
  for(j=0;j<ndigit;j++)
    printf("%d",*(pa+j));
  printf("\n");
}
搜索更多相关主题的帖子: 解释 
2009-09-12 11:47
lhl198989
Rank: 2
等 级:论坛游民
帖 子:16
专家分:67
注 册:2009-9-12
收藏
得分:35 
这是因为读入的是字符,而字符是按照ANSI码的内容存储的,在ANSI码中数字是连续的,0的ANSI码是48,后面的数字1到九依次类推。所以在把字符转换为整型数字时要减去48。
2009-09-12 14:54
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:15 
楼上正解,这是数字与数字的字符型转换

努力—前进—变老—退休—入土
2009-09-12 15:10
xdyuan33
Rank: 3Rank: 3
来 自:广西大学化工学院
等 级:论坛游侠
帖 子:146
专家分:145
注 册:2009-7-24
收藏
得分:0 
非常感谢两位

参与切磋是美德,每天回帖即可获得10分可用分!
2009-09-12 17:44
快速回复:求两句子的解释
数据加载中...
 
   



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

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