【问题标题】:How to set value of alphabet letter? C++ [closed]如何设置字母的值? C++ [关闭]
【发布时间】:2013-02-14 19:00:58
【问题描述】:

好吧,我必须做一个任务,它会以 UNIQUE 方式对数组元素进行排序。

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

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

谢谢。

【问题讨论】:

  • 他的意思是他有功课要做,不想做……
  • 这不是家庭作业。
  • 闻起来很像,考虑到这很容易解决...
  • 好吧,考虑到我是 C++ 的初学者,我不会去尝试解决一些复杂和高级的挑战..
  • 嗨@JohnSmith,正如其他cmets所建议的那样,如果这是家庭作业,请使用homework标签将其标记。此外,还建议发布“您已经获得/尝试过的内容”。如果您还没有任何东西,也许一些伪代码会很有用。

标签: c++ arrays string letters alphabet


【解决方案1】:

你需要定义一个函数

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

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

w = ch - 'A' + 1

您也可以检查字符是否在“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;
}

【讨论】:

  • “char”是什么意思?
  • 抱歉,已修复,我的意思是“ch”,即字符。 ch = s[i];我是你的循环计数器。
  • 谢谢。但它会与 (std::string& s) 一起使用吗? ?上述答案之一说我必须使用字符。即使字符串是一个字母,它也不会这样工作..
  • 我添加了此类功能的工作示例
【解决方案2】:

如果您正在使用 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 )

【讨论】:

  • 什么是 ASCII 机器?
  • @JohnSmith 使用 ASCII 进行字符表示的机器,这是当今大多数机器。一些大型机使用EBCDIC en.wikipedia.org/wiki/EBCDIC,它有间隙,例如I和J之间,所以'J' - 'I' != 1
【解决方案3】:

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

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 值(见下面的答案)
  • 没错...我不需要小字符,只需要大字符。我打算使用 ASCII 方法,但我不知道该怎么做。
【解决方案4】:

如果底层编码是顺序的,比如ascii

letter - 'A' + 1

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

【讨论】:

  • 我不认为 char_traits 具备此功能。
  • “字母”是什么意思?
  • @R.MartinhoFernandes,我想到了char_traits::to_int_type
  • @StoryTeller 这基本上是一个完整的促销活动。它将 char(0x41) “更改”为 int(0x41)。
  • 这并不安全。它什么都不做。它不会以任何方式改变值。它所做的只是改变类型。
猜你喜欢
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2019-04-21
  • 2016-07-23
  • 2020-12-10
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多