如何为后面的字符“@”或“#”或“^”和“*”分配数字
how to assign number to following characters "@" or "#" or "^" and "*"
我是一名新的 c++ 学生,正在研究一个需要为特殊字符分配数字的问题。
练习要求将字符@设置为2,#设置为3,^设置为4,*设置为5。例如,如果用户输入@#^*,则应与输入(2+ 3+4+5).
谢谢你,约翰。
一个std::map<char, int>
可以满足你的需要。
您可以使用一个简单的字符数组:
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:查找 table
另一种方法是使用查找 table。创建一个包含关系的结构,然后制作这些结构的数组。
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 = '[=12=]';
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
注意:我输入了特殊符号,然后按了回车键。
我是一名新的 c++ 学生,正在研究一个需要为特殊字符分配数字的问题。
练习要求将字符@设置为2,#设置为3,^设置为4,*设置为5。例如,如果用户输入@#^*,则应与输入(2+ 3+4+5).
谢谢你,约翰。
一个std::map<char, int>
可以满足你的需要。
您可以使用一个简单的字符数组:
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:查找 table
另一种方法是使用查找 table。创建一个包含关系的结构,然后制作这些结构的数组。
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 = '[=12=]';
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
注意:我输入了特殊符号,然后按了回车键。