我正在做练习,练习,其中的重点是接收一串数字和字母,检查它是否是一封信,并将其转换为带有规则的数字
A = 10, Z = 35
然后将所有内容放在一个数组中。一些操作之后。
我知道如何处理除规则部分以外的所有事情,不知道如何检查它是什么字母以及如何用正确的数字替换它。我知道有类似
的方法 if(string[x] == 'a-Z')
但我不确定这是如何运作的,或者如果知道它是一封信,如何选择正确的数字。
答案 0 :(得分:0)
有许多方法,有些方法比其他方法更便携。
以下查找数组中的string[x]
。如果成功,它与start之间的指针差异就是值。
const char *alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *p = strchr(alphanum, string[x]);
if (p == NULL || *p == '\0') {
; // Not a digit or A-Z
} else {
int value = p - alphanum;
// do something with the value;
}
我将a-z
的处理留给OP。 (转换为上层或使用另一个数组)
如果代码采用ASCII,其顺序为A Z
:
int ToValue(char ch) {
if (ch >= 'A' && ch <= 'Z') return ch - 'A' + 10;
if (ch >= 'a' && ch <= 'z') return ch - 'a' + 10;
if (ch >= '0' && ch <= '9') return ch - '0';
// No match
return -1;
}
答案 1 :(得分:0)
我喜欢将类似函数划分为更多处理较小逻辑的函数。
int isLowerCaseLetter(char c)
{
return ( c >= 'a' && c <= 'z');
}
int isUpperCaseLetter(char c)
{
return ( c >= 'A' && c <= 'Z');
}
int letterToNumber(char c)
{
if ( isdigit(c) )
{
return (c - '0');
}
else if ( isLowerCaseLetter(c) )
{
return (c - 'a' + 10);
}
else if ( isUpperCaseLetter(c) )
{
return (c - 'A' + 10);
}
// Problem
assert(0);
return 0; // Keep the compiler happy
}