字符串处理(将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加) C语言xdoj704

题目描述:

        输入由数字和字符构成的字符串(不包含空格),将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加,并输出累加结果,如果字符串中不含有任何满足十六进制格式的字符,则输出结果 NO。

输入格式

        输入一行字符串,字符串 c 的长度不超过 50。

输出说明

        输出一个整数,表示十进制的累加值。

输入样例 1

3A5cH5o

输出样例 1

35

输入样例 2

GjoniuJk

输出样例 2

NO

#include <stdio.h>
#include <string.h>

//字符串处理1
int main() {
    int i = 0, flag = 0, sum = 0;
    char str[51] = {0};
    gets(str);
    for (i = 0; i < strlen(str); i++) {
        if (str[i] == '0') sum += 0, flag = 1;
        else if (str[i] == '1') sum += 1, flag = 1;
        else if (str[i] == '2') sum += 2, flag = 1;
        else if (str[i] == '3') sum += 3, flag = 1;
        else if (str[i] == '4') sum += 4, flag = 1;
        else if (str[i] == '5') sum += 5, flag = 1;
        else if (str[i] == '6') sum += 6, flag = 1;
        else if (str[i] == '7') sum += 7, flag = 1;
        else if (str[i] == '8') sum += 8, flag = 1;
        else if (str[i] == '9') sum += 9, flag = 1;
        else if (str[i] == 'A' || str[i] == 'a') sum += 10, flag = 1;
        else if (str[i] == 'B' || str[i] == 'b') sum += 11, flag = 1;
        else if (str[i] == 'C' || str[i] == 'c') sum += 12, flag = 1;
        else if (str[i] == 'D' || str[i] == 'd') sum += 13, flag = 1;
        else if (str[i] == 'E' || str[i] == 'e') sum += 14, flag = 1;
        else if (str[i] == 'F' || str[i] == 'f') sum += 15, flag = 1;
    }
    if (!flag) printf("NO\n");
    else printf("%d\n", sum);
    return 0;
}

注:易错点(为什么设置标记 flag 以及 flag 放到哪)

当输入为 000 时, sum 为0,字符串中含有十六进制的字符,不能输出NO;

当输入为 hijk 时, sum 为0,字符串中不含十六进制字符,输出NO;

当输入为混合形式如12abhj 时,输出sum 为求和(普通情况)。

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多多想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值