c ++中的类型转换,整数和字符

时间:2010-01-24 18:43:46

标签: c++ types

我正在尝试编写一个函数来检测由赋值定义的分隔符,我知道它不是一个好的编程风格

#define EXCLAMATION_POINT 33, but to instead do #define EXCLAMATION_POINT '!'

这是我的代码:

#include <iostream>
#include <ostream>
using namespace std;
#define PERIOD '.'
#define QUESTION_MARK '?'
#define EXCLAMATION_POINT '!'
#define COMMA ','
#define COLON ':'
#define SEMICOLON ';'

inline bool IsSeparator(int x) 
{
    if (isspace(x) || 
        x == PERIOD || 
        x == QUESTION_MARK ||
        x == EXCLAMATION_POINT ||
        x == COMMA ||
        x == COLON || 
        x == SEMICOLON) {
        return true;
    }
    else {
        return false;
    }
}

int main (int argc, char * const argv[]) {
    int input;
    cout << "Enter characters: \n";
    input = cin.get();
    if (!IsSeparator(input))
        cout << "true";
    else {
        cout << "false";
    }
    return 0;
}

但是在我的IsSeparator()中,如何将该int转换为char以与'!'进行比较。我想如果我做了类似(char)EXCLAMATION_POINT的工作,但它没有,并且值保留在int。我在这做错了什么?谢谢!

2 个答案:

答案 0 :(得分:3)

您不需要任何演员阵容,但是:

if (!IsSeparator(input))

应该是:

if (IsSeparator(input))

另外,你的提示:

cout << "Enter characters: \n";

表示您可以输入多个字符。所以你可以,但是cin.get()只会读一个。

关于为事物提供符号名称。假设您正在解析分隔符为冒号的文件。然后说:

const char SEPARATOR = ':';

因为您可以在文件格式更改时更改它,例如:

const char SEPARATOR = '|';

但是将自己的名称赋予ASCII(或其他)字符集的成员通常没有意义。

在你的代码中,创建一个分隔符数组可能是有意义的(我没有显示你为了方便输入而使用的所有分隔符):

const char SEPARATORS[] = {':', '|', '!', 0 };

然后让您的验证函数遍历数组。请注意,在这种情况下,数组也可以表示为字符串文字:

const char * const SEPARATORS = ":|!";

答案 1 :(得分:2)

是什么让你觉得那些#define是一个很好的做法 ?您是否需要处理2015年的惊叹号重新定义?

可以安全地假设感叹号现在将永远由'!'表示。就像明天一样,1也会表示常量。

您不需要定义EXCLAMATION_MARK,只需要定义ONE或MINUS或INT。