【问题标题】:Relating a letter to a value that's stored in an array将字母与存储在数组中的值相关联
【发布时间】:2014-06-30 01:58:48
【问题描述】:

我有一个问题,我需要将一个值与一个字母相关联。这些值以数组形式出现。例如:

Value vector -> [1,2,3,1,2,5,1,...,8]

我需要一个想法,使该向量的第一个数字链接到字母“a”,第二个数字链接到字母“b”,等等,直到最后一个数字链接到字母“z”。

所以,a -> 2,“a”的值为 2。

这样做的目的是如果我有一个像“air”这样的词,我希望air的值是“a”的值+“i”的值+“r”的值。

【问题讨论】:

  • 这个值向量是什么?为什么 a 没有链接到 1
  • 我有一个文件,它是这样的:a 2 b 1 c 5 等。我正在考虑将这些数字存储在一个数组中,因此我可以将每个字母分配给该值。如果您有更好的解决方案,我会全力以赴。
  • Value的类型是什么?
  • 既然知道哪个字母属于哪个数字,为​​什么不能添加值?
  • value 是一个 int vec[字母表中的字母数];

标签: c vector assign letters


【解决方案1】:

您的问题似乎是您无法从字母中获取数组索引。二十六个小写拉丁字母在 ASCII 中是一个连续的块,用单引号可以得到一个字符的 ASCII 码,因此:

int ix = c - 'a'

请注意,如果您的字符 c 不是字母,这将为您的数组提供无效索引。如果您的字母表不是纯拉丁字母表,您可以编写一个函数来为您的字母分配一个数字索引。例如,如果我想为德语字母编写索引函数,我会这样做:

int index_de(int c) {
    if (c == 'ä') return 26;
    if (c == 'ö') return 27;
    if (c == 'ü') return 28;
    if (c == 'ß') return 29;
    if (c < 'a' || c > 'z') return -1;
    return c - 'a';
}

(因为重音字母超出了纯 7 位 ASCII 范围,这将引入源代码和输入编码问题。请注意。)

然后,当您 (a) 阅读文件,然后 (b) 扫描要评分的单词时,您可以使用此功能为字母代码分配分数。

【讨论】:

  • 谢谢,这正是我所缺少的。我想知道我是否可以将您的变量“c”定义为 97,所以 a-c 将是矢量 [0],b-c 将是矢量 [1],等等。
  • 字符 'a' 是一个值为 97 的整数常量。您可以有一个值为 97 的(可能是全局的)变量或一个 #defined) 宏,但我建议使用这个符号——很明显你正在对字符进行算术运算。 (x - '0' 也是如此,一眼就能看出正在发生从字符串到数值的转换。)
猜你喜欢
  • 1970-01-01
  • 2012-02-05
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多