题目描述:
输入由数字和字符构成的字符串(不包含空格),将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加,并输出累加结果,如果字符串中不含有任何满足十六进制格式的字符,则输出结果 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 为求和(普通情况)。