C++ 如何设置字母的值?C++;

C++ 如何设置字母的值?C++;,c++,arrays,string,letters,alphabet,C++,Arrays,String,Letters,Alphabet,嗯,我必须做一个任务,它将以独特的方式对数组中的元素进行排序 例如,如果我输入第一个字符串: BOB,我必须这样做:2+15+2(因为它们在字母表中的位置),然后除以字符数/3,对所有输入的字符串都这样做,然后按从高到低排序。:) 我的问题是,如何设置值1,2,3,4,5。。。对于A、B、C、D、E。。。。。(只有大写字母) 谢谢。如果基础编码是必需的,例如ascii letter - 'A' + 1 一种更健壮、更通用的方法是检查字符类型的类型。您需要定义一个函数 int weight(co

嗯,我必须做一个任务,它将以独特的方式对数组中的元素进行排序

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

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


谢谢。

如果基础编码是必需的,例如
ascii

letter - 'A' + 1

一种更健壮、更通用的方法是检查字符类型的类型。

您需要定义一个函数

int weight(const std::string& s);
然后逐字符迭代字符串,并执行以下操作:

w = ch - 'A' + 1
您还可以检查字符是否在“A”和“Z”之前,或者假设

你需要更多地了解

编辑: 重量函数代码(简化):

int-weight(const-std::string&s){
整数和=0,i=0;
对于(i=0;i
要获取值,可以使用以下代码:

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]);
     }

您只需将字符串转义到数组并循环通过它…

如果您在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 )
const char letters[]=“abcdefghijklmnopqrstuvxyz”;
静态常量整数[256]={0};
对于(大小索引=0;索引<字母大小;++索引){
数字[字母[索引]]=索引+1;
}
断言(数字['A']==1)
断言(数字['Z']==26)

他说他有家庭作业要做,不想做……这不是家庭作业。闻起来很像,考虑到这是一个简单的解决办法……嗯,考虑到我是C++初学者,我不会去尝试解决一些复杂的和高级的挑战……嗨,JohnSmith,正如其他评论所建议的那样。如果这是家庭作业,请用标签标记。此外,还建议发布“你已经得到/尝试过的”。如果你还没有得到任何东西,也许一些伪代码会有用。他只要求大字母,你不需要使用这样的表格,你可以只使用它的ASCII值(见下面的答案),这是真的。。。我不需要小的,只要大的。我打算用ASCII方法,但我不知道怎么做。你说的“char”是什么意思?对不起,修正了,我指的是“ch”,也就是字符。ch=s[i];这是你的循环计数器,谢谢。但是它能与(std::string&s)一起工作吗?上面的一个答案说我必须使用字符。即使字符串是一个字母,它也不会以这种方式工作。我添加了一个这样的函数的工作示例。我不认为char_traits具有这样的功能。“字母”是什么意思?@R.MartinhoFernandes,我想。@StoryTeller这基本上是一个整体提升。它将char(0x41)改为int(0x41),这样不安全。它什么也不做。它不会以任何方式更改值。它所做的只是改变类型。什么是ASCII机器?@JohnSmith使用ASCII表示字符的机器,这是当今大多数机器的特点。一些大型机使用的EBCDIC有间隙,例如I和J之间,因此
'J'-'I'!=1
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 )