1

所以,我需要做的是将一个字符数组转换成一个数字数组。

我知道这听起来像是一个奇怪的要求,但这是我一直在尝试做的:

有一个这样的数组:

charArray[0] = e;
charArray[1] = b;
charArray[2] = p;

并将其翻译成:

numArray[0] = 5;
numArray[1] = 2;
numArray[2] = 16;

所以它会将字符翻译成它在字母表中的位置(例如,“a”是第一个字母,“b”是第二个,等等)

这样做的最佳方法是什么?我打算一个一个地尝试,但后来意识到我的代码行太多了,这将是大量嵌套的 if 语句,我认为可能有更好的方法来做到这一点。

(我的方式将是if charArray[0] = a then numArray[0] = 1,并像这样遍历每个字母,直到到达if charArray[0] = z then numArray[0] = 26,但这将需要 char 数组中的 26 个不同的 if 语句 PER CHAR,在我看来,这将是一种可怕的做法,因为我的 char 数组非常长。)

4

3 回答 3

7

您可以对每个索引使用一个技巧i

numArray[i] = charArray[i] - 'a' + 1;

一种更“按部就班”的做法是:

final String letters = "abcdefghijklmnopqrstuvwxyz";
. . .
numArray[i] = letters.indexOf(charArray[i]) + 1;

那么任何不是小写字母的位置i都会charAray[i]以 0 结尾numArray[i]。有了这个技巧, 的价值numArray[i]将是不可预测的。

于 2013-05-05T18:47:30.007 回答
1

您可以简单地:

numArray[i] = charArray[i] - 'a' + 1;

解释:

查看ascci 表,您会看到每个char的十进制值

a十进制值为97。因此,您从中删除 97 并添加 1。您得到 1。

b...相同,从 98 ( )z中删除 97 ( ) 将是 1,并且您添加 1 得到 2.. 等等..ab

于 2013-05-05T18:47:20.647 回答
0

假设所有字符都是小写的,你可以写:

numArray[0]  = (charArray[0] - 'a' + 1);

如果您有小写和大写,则可以使用 if 语句,例如:

if (charArray[0] >= 'A' && charArray[0] <= 'Z') {
  numArray[0]  = (charArray[0] - 'A' + 1);
} else {
  numArray[0]  = (charArray[0] - 'a' + 1);
}
于 2013-05-05T18:47:49.820 回答