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日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c