枚举数字

时间:2009-07-16 19:30:56

标签: c++

对于我的书类,我正在存储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};

编译器错误表示预期标识符,这意味着它将数字视为标识符的值而不是标识符本身。那么列举数字可能吗?

9 个答案:

答案 0 :(得分:6)

我认为你会以错误的方式解决这个问题......为什么不使用一个简单的正则表达式来简化整个事情呢?

(是的,我知道,这不是原来的问题,但它可能会让你的生活变得更轻松。)

This pagethis 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)

#include <ctype.h>

不要忘记基础知识。上面的包含文件会为您提供isalpha()isdigit()

答案 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

相关问题