用数字改变字母

时间:2015-06-14 01:28:58

标签: c

我正在做练习,练习,其中的重点是接收一串数字和字母,检查它是否是一封信,并将其转换为带有规则的数字

A = 10, Z = 35

然后将所有内容放在一个数组中。一些操作之后。

我知道如何处理除规则部分以外的所有事情,不知道如何检查它是什么字母以及如何用正确的数字替换它。我知道有类似

的方法
     if(string[x] == 'a-Z')

但我不确定这是如何运作的,或者如果知道它是一封信,如何选择正确的数字。

2 个答案:

答案 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
}