对于我的书类,我正在存储ISBN号,我需要验证输入的数据,所以我决定使用枚举。 (前三个输入必须是单个数字,最后一个必须是字母或数字。)但是,我想知道是否有可能枚举数字。我已经尝试将它们作为常规整数,带双引号的字符串样式和带单引号的char样式。
示例:
class Book{
public:
enum ISBN_begin{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};
enum ISBN_last{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', a, b, c, d, e, f,
g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z};
编译器错误表示预期标识符,这意味着它将数字视为标识符的值而不是标识符本身。那么列举数字可能吗?
答案 0 :(得分:6)
我认为你会以错误的方式解决这个问题......为什么不使用一个简单的正则表达式来简化整个事情呢?
(是的,我知道,这不是原来的问题,但它可能会让你的生活变得更轻松。)
This page和this page提供了一些使用正则表达式验证isbn数字的好例子。
我认为创建一个枚举,其值等于他们所枚举的实体......我认为你做的比你做的要多得多。
答案 1 :(得分:4)
为什么要枚举数字?存在枚举以给数字命名。如果要存储数字,请存储整数 - 或者在本例中为char(因为您还需要存储字符)。要进行验证,请接受一个字符串并编写如下函数:
bool ISBN_Validate(string val)
{
if (!val.length == <length of ISBN>) return false;
if (val[0] < '0' || val[0] > '9') return false;
foreach (char ch in val)
{
if (ch is not between '0' and 'z') return false;
}
}
简单 - 没有愚蠢的枚举;)
答案 2 :(得分:4)
答案 3 :(得分:1)
你必须做这样的事情:
enum ISBN_begin {
ZERO, ONE, TWO // etc.
};
答案 4 :(得分:1)
我建议为每个开始/结束标准使用一个字符串,即:
string BeginCriteria = "0123456789";
string EndCriteria = "0123456789abcd... so forth";
// Now to validate the input
// for the first three input characters:
if ( BeginCriteria.find( chInput ) != npos )
// Then its good.
// For the last 3 characters:
if ( EndCriteria.find( chInput ) != npos )
// Then its good.
答案 5 :(得分:1)
枚举真的不是你想要使用的。它们不是那样的。枚举的成员必须是变量或函数名称之类的符号,您可以为它们赋值。
enum numbers { One = 1, Two, Three };
One
之后相当于具有整数值1的命名常量。numbers
等同于具有整数值子范围的新类型。
你可能想要的是使用正则表达式。
答案 6 :(得分:0)
如果你不能使用正则表达式,为什么不使用char数组呢?你甚至可以使用相同的数组,并且只有一个const索引号,其中ISBN_last字符在数组中开始。
答案 7 :(得分:0)
枚举不是用文字定义的,它们是用变量
定义的答案 8 :(得分:0)
某些语言(Ada for one)可以提供您想要的内容,因此您的请求不会太愚蠢。你只是忘记了在C和C ++中,字符文字只是整数文字的另一种形式(C语言中类型为int
,C ++中类型为char
)