如何设置字母值? C ++

时间:2013-02-28 14:31:34

标签: c++ arrays string letters alphabet

好吧,我必须完成一项任务,它将以UNIQUE的方式对数组元素进行排序。

所以,例如,如果我输入第一个字符串: BOB,我必须这样做:2 + 15 + 2(因为它们在字母表中的位置),然后除以chars / 3的数量,并对所有输入的字符串执行此操作,然后按从最高到最低排序。 :)

我的问题是,如何为A,B,C,D,E ......设置值1,2,3,4,5 ......(只有大字母)。

谢谢。

4 个答案:

答案 0 :(得分:2)

如果基础编码是seuqential,例如ascii

letter - 'A' + 1

更强大和通用的方法是检查字符类型的char_traits

答案 1 :(得分:2)

您需要定义一个函数

int weight(const std::string& s);

然后通过char迭代字符串char并执行以下操作:

w = ch - 'A' + 1

你也可以检查char是在'A'和'Z'之前还是假设。

您需要详细了解ASCII

修改 重量函数代码(简化):

int weight(const std::string& s) {
    int sum = 0, i = 0;
    for(i = 0; i < s.size(); i++) {
        char ch = s[i];
        sum += ch - 'A' + 1;
    }
    return sum/i;
}

答案 2 :(得分:1)

如果您正在使用ASCII机器,@ StoryTeller的答案可行。否则,您可以创建一个数组以在两者之间进行映射:

const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const int numbers [ 256 ] = { 0 };

for ( size_t index = 0; index < sizeof letters; ++index ) {
    numbers [ letters [ index ] ] = index + 1;
}

assert ( numbers [ 'A' ] == 1 )
assert ( numbers [ 'Z' ] == 26 )

答案 3 :(得分:0)

要获取值,您可以使用以下代码:

int getValue(char which)
    {
    int ret = 0;
    switch(which)
       {
       case 'a' : ret = 1 ; break;
       case 'A' : ret = 27 ; break;
       case 'b' : ret = 2 ; break;
       case 'B' : ret = 28 ; break;
       // and so on....
       }
    return ret;
    }
  int result = 0;
  while(....)
     {
     result = result + getValue(myarray[counter]);
     }

你只需要将字符串转义为数组并循环遍历它......