C ++从整数值枚举字符
c++ enum characher from integer value
所以我的问题是这样的,我必须输入一个 1-7 的数字,并且对于每个相应的数字,我必须打印英语单词中的一个字母(e 代表 1,n 代表 2,等等。 )
这是我的想法:
#include <iostream>
using namespace std;
int main()
{
enum eng {e='e', n='n',g,l,i,s,h}
};
int x;
cout << "dati x\n";
cin >> x;
if (x >= 0 && x <= 7)
eng val = static_cast<eng>(x);
cout << x;
}
我希望将数字 ( x ) 从 eng 类型转换为相应的字母,但转换会返回数字(如果我输入 1,它会给我 1,如果我输入 2,它会给我 2 )
我尝试在 eng 中为 e 和 n 分配一个 char 值,看看会发生什么,但结果相同,我知道我可以使用 switch,但我想尝试让它工作
您拥有的枚举没有值 0、1...,因为您设置了 'e' 和 'n'。这些是 char 类型,int 值分别为 101 和 110。 'n' 之后的所有枚举值将从 110 开始递增 1。如前所述,您想要的是某种类型的 const 数组(std::array
、char[]
、std::vector
, std::string
(如下所述))将字符 'e', 'n', ... 添加到此数组。然后,您可以只使用 myArray[0-6] 来获取相应的字符。
讨论枚举有点超出了问题的范围,因为枚举在这里只是错误的工具。单词 "english"
中字母的值不连续,并且命名为常量的枚举的名称不容易访问,因此枚举无助于将索引映射到字符。
将索引映射到字符的工具是 std::string
:
std::string english{"english"};
if (x >= 1 && x < 8) std::cout << english[x-1];
你的边界是错误的。 "english"
只有 7 个字符,而您的条件允许 8 个不同的索引。因为数组索引是从零开始的,但是任务要求您使用从 1 开始的索引,所以您需要减去 1 以获得所需的字符。而且,这是风格问题,但通常使用半开区间(即[1,8)
,包括下限,不包括上限)。
所以我的问题是这样的,我必须输入一个 1-7 的数字,并且对于每个相应的数字,我必须打印英语单词中的一个字母(e 代表 1,n 代表 2,等等。 ) 这是我的想法:
#include <iostream>
using namespace std;
int main()
{
enum eng {e='e', n='n',g,l,i,s,h}
};
int x;
cout << "dati x\n";
cin >> x;
if (x >= 0 && x <= 7)
eng val = static_cast<eng>(x);
cout << x;
}
我希望将数字 ( x ) 从 eng 类型转换为相应的字母,但转换会返回数字(如果我输入 1,它会给我 1,如果我输入 2,它会给我 2 ) 我尝试在 eng 中为 e 和 n 分配一个 char 值,看看会发生什么,但结果相同,我知道我可以使用 switch,但我想尝试让它工作
您拥有的枚举没有值 0、1...,因为您设置了 'e' 和 'n'。这些是 char 类型,int 值分别为 101 和 110。 'n' 之后的所有枚举值将从 110 开始递增 1。如前所述,您想要的是某种类型的 const 数组(std::array
、char[]
、std::vector
, std::string
(如下所述))将字符 'e', 'n', ... 添加到此数组。然后,您可以只使用 myArray[0-6] 来获取相应的字符。
讨论枚举有点超出了问题的范围,因为枚举在这里只是错误的工具。单词 "english"
中字母的值不连续,并且命名为常量的枚举的名称不容易访问,因此枚举无助于将索引映射到字符。
将索引映射到字符的工具是 std::string
:
std::string english{"english"};
if (x >= 1 && x < 8) std::cout << english[x-1];
你的边界是错误的。 "english"
只有 7 个字符,而您的条件允许 8 个不同的索引。因为数组索引是从零开始的,但是任务要求您使用从 1 开始的索引,所以您需要减去 1 以获得所需的字符。而且,这是风格问题,但通常使用半开区间(即[1,8)
,包括下限,不包括上限)。