如何为下列字符“@”或“#”或“^”和“*”指定编号

时间:2016-03-12 16:26:37

标签: c++ mapping

我是一名新的c ++学生,正在处理一个问题,需要为特殊字符分配一个数字。

练习要求将字符@设置为2,#设置为3,^设置为4,将*设置为5.例如,如果用户输入@#^ *,则应该与输入相同(2 + 3 + 4 + 5)。

谢谢你,John。

2 个答案:

答案 0 :(得分:5)

std::map<char, int>可以满足您的需求。

答案 1 :(得分:1)

您可以使用简单的字符数组:

static const char symbols[] = {'@', '#', '^', '*'};
char c;
std::cin >> c;
unsigned int value;
for (value = 0; value < sizeof(symbols); ++value)
{
  if (c == symbols[value])
  {
    break;
  }
}
if (value >= sizeof(symbols))
{
  // Symbol not found.
}
else
{
  value += 2;
}

上面的代码搜索符号的字符数组。如果符号存在,则索引是与符号关联的值。但是,由于@符号是第一个且数组索引从0开始,因此在找到值之后通过向数组索引添加2来进行调整。

编辑1:查找表
另一种方法是使用查找表。创建包含关系的结构,然后创建这些结构的数组。

struct Relationship
{
  char  c;
  unsigned int value;
};

Relationship table[] = 
{
  {'@', 2}, {'#', 3}, {'^', 4}, {'*', 5},
};
const unsigned int TABLE_SIZE =
    sizeof(table) / sizeof(table[0]);

char c;
cin >> c;
unsigned int value = 0;
for (unsigned int i = 0; i < TABLE_SIZE; ++i)
{
    if (table[i].c == c)
    {
      value = table[i].value;
      break;
    }
}

编辑2:使用switch
另一种方法是使用switch语句:

char c = '\0';
cin >> c;
unsigned int value;
switch (c)
{
    case '@': value = 2; break;
    case '#': value = 3; break;
    case '^': value = 4; break;
    case '*': value = 5; break;
    default: value = 0; break;
}

if / else阶梯:
编辑3:程序:

#include <iostream>

using std::cin;
using std::cout;


int main(void)
{
    cout << "Enter symbol: ";
    char c;
    cin >> c;
    unsigned int value = 0U;
    if (c == '@')
    {
      value = 2;
    }
    else if (c == '#')
    {
      value = 3;
    }
    else if (c == '^')
    {
      value = 4;
    }
    else if (c == '*')
    {
      value = 5;
    }
    else
    {
      value = 0;
    }

    cout << "\nYour value: " << value;
    return 0;
}

示例运行:

C:\Debug>symbol_matching.exe
Enter symbol: @

Your value: 2
C:\Debug>symbol_matching.exe
Enter symbol: *

Your value: 5
C:\Debug>symbol_matching.exe
Enter symbol: ^

Your value: 4
C:\Debug>symbol_matching.exe
Enter symbol: #

Your value: 3

注意:我输入了特殊符号,然后按Enter键。