华中科技大学 Mooc_第六章第二题

题目内容:

运用指针技术实现,将输入的十六进制数的字符串转换为对应的十进制整数并输出。``

输入格式:

以字符串形式输入一个16进制数

输出格式:

输出该16进制数转换后的十进制数

输入样例:

12AB3d

输出样例:

1223485

代码如下

#include<iostream>
using namespace std; 
int main(){
    char temp[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char num[100];
    cin.getline(num,100);
    char*p=num;
    int n=0;
    int i;
    while(*p){
        if(*p>='a'&&*p<='f'){
            *p=*p+'A'-'a';
        }//全部转化为大写
        p++;
    }
    p=num;
    while(*p){
        for(i=0;temp[i]!=*p;i++){ 
        }
        n=n*16+i; 
        p++;
    }
    cout<<n;
    return 0;
​
​
}

注意指针递增的位置

while(*p){
        if(*p>='a'&&*p<='f'){
            *p=*p+'A'-'a';
        }//全部转化为大写
        p++;
    }

这一段代码中,先在if块中将*p转化为大写后,在在if语句外面自增指针p,不要写到if内部了

while(*p){
        for(i=0;temp[i]!=*p;i++){ 
        }
        n=n*16+i; 
        p++;
    }

这一段通过一个没有操作的for循环找到*p对应的i,再后面求n的值以及对p的自增都在for循环外部

  • 所以在循环中进行指针自增,要注意是否在循环内自增

  • 巩固while(*p)的使用

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值