gpt4 book ai didi

c++ - C++ 中的类型转换、整数和字符

转载 作者:行者123 更新时间:2023-11-30 01:32:07 25 4
gpt4 key购买 nike

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

#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 中。我在这里做错了什么?谢谢!

最佳答案

你不需要任何转换,但是:

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 = ":|!";

关于c++ - C++ 中的类型转换、整数和字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com