ShenHai. 2021-11-13 12:23 采纳率: 100%
浏览 144
已结题

c 指针从字符串中提取整数


#include<stdio.h>

int main()
{
    char str[81],*p=str;
    int num,count=0;
    printf("请输入一个包括多段数字的字符串:\n");
    gets(str);
    printf("从该字段中找到的整数有:\n");
    while(*p)
    {
        if(*p>='0'&&*p<='9')
        {
            for(num=0;*p>='0'&&*p<='9';p++)
            {
               num=num*10+(*p-'0');   //*p-'0'表示将数字字符*p转为数字 
            }
            count++;
            printf("NO.%d:%d\n",count,num);
        }
        else
        {
            while(*p!='\n'&&(*p<'0'||*p>'9'))
            {
                p++;
            }
        }
     }
     printf("\n共找到%d个整数.\n",count);
     return  0;
 } 

求解释一下 num=num10+(p-'0'); 这一句,我不理解这是怎么把p-'0'表示将数字字符p转为数字 ?还有num10的作用,和num10这里为什么必须是10,换个其他数,结果就不成立了!

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-11-13 12:26
    关注

    因为p是char类型,所以p就是char型,char型存储的是字符的ASCII码,比如'0'的ASCII码是48。如果把char转换为整数处理,那么'0'对应的整数0的转换方法就是 将char值减去'0'
    至于乘以10,因为你字符串转换出来的是10进制整数啊,当然乘以10
    比如字符串"123",共三个字符,那么转换过程就是遍历每一个字符,然后加起来到sum变量
    第一次取出字符'1',对应的整数是1,通过 '1'-'0'计算差值就是对应的数字。赋值给sum,此时sum=1
    第二次取出字符‘2’,对应整数为2,sum = sum * 10 + '2' - '0' = 1 * 10 + 2= 12
    第三次取出字符'3',同样处理,sum = sum * 10 + '3' - '0' = 12 * 10 + 3 = 123
    转换完成
    能理解吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月14日
  • 已采纳回答 11月13日
  • 创建了问题 11月13日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)