C++中的类型转换、内部代码和字符
我正试图编写一个函数来检测由赋值定义的分隔符,我知道这不是一种好的编程风格C++中的类型转换、内部代码和字符,c++,types,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
#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惊叹号的事情,它会工作,但它不会,并且值保留在一个整数上。我在这里做错了什么?谢谢 您不需要任何演员阵容,但是:
if (!IsSeparator(input))
应该是:
if (IsSeparator(input))
此外,您的提示:
cout << "Enter characters: \n";
因为您可以在文件格式更改时对其进行更改,例如:
const char SEPARATOR = '|';
但是,通常情况下,给ASCII或任何字符集的成员指定自己的名称是没有意义的
在您的代码中,创建一个分隔符数组可能是有意义的。为了便于键入,我没有显示您使用的所有分隔符:
const char SEPARATORS[] = {':', '|', '!', 0 };
然后让验证函数在数组上迭代。注意:在本例中,数组也可以表示为字符串文字:
const char * const SEPARATORS = ":|!";
您不需要任何演员阵容,但:
if (!IsSeparator(input))
应该是:
if (IsSeparator(input))
此外,您的提示:
cout << "Enter characters: \n";
因为您可以在文件格式更改时对其进行更改,例如:
const char SEPARATOR = '|';
但是,通常情况下,给ASCII或任何字符集的成员指定自己的名称是没有意义的
在您的代码中,创建一个分隔符数组可能是有意义的。为了便于键入,我没有显示您使用的所有分隔符:
const char SEPARATORS[] = {':', '|', '!', 0 };
然后让验证函数在数组上迭代。注意:在本例中,数组也可以表示为字符串文字:
const char * const SEPARATORS = ":|!";
是什么让你认为这些定义是一个很好的实践?你需要处理2015年的感叹号重新定义吗 可以安全地假设感叹号将由“!”表示从现在到永远。就像常数一样,明天也将用1表示
您不需要定义感叹号,就像您不需要定义一、减或INT一样。是什么让您认为这些定义是一种很好的实践?你需要处理2015年的感叹号重新定义吗 可以安全地假设感叹号将由“!”表示从现在到永远。就像常数一样,明天也将用1表示
你不需要定义感叹号,就像你不需要定义一、负号或整数一样。嗯,我不确定我是否完全理解你所说的定义和样式,但最好的方法是根本不要这样做。只需将句点替换为“.”,依此类推。如果你真的想要常数,至少让它们成为static const char Period='.',根本不需要使用define,更不用说尖叫了。:]另外,你的代码对我来说也像预期的那样工作。呃,我不确定我是否完全理解你所说的定义和风格,但最好的方法是根本不要这样做。只需将句点替换为“.”,依此类推。如果你真的想要常数,至少让它们成为static const char Period='.',根本不需要使用define,更不用说尖叫了。:]另外,您的代码对我来说也能正常工作。@Kornel:据我所知,Unicode将前255个字符与ASCII匹配。所以保持“!”。但是我对Unicode几乎一无所知。嗯,有两种可能:一种是单个字符“!”是一个感叹号,在这种情况下,针对“!”进行测试或者感叹号由多个字符组成的序列表示,但如果是这样,定义也没有帮助,因为单个字符之间的比较是行不通的。在这种情况下,您必须与一系列字符进行比较。因此,您需要类似于is_感叹号的函数,而不是将字符与字符进行比较define@Kornel:据我所知,Unicode将前255个字符与ASCII匹配。所以保持“!”。但是我对Unicode几乎一无所知。嗯,有两种可能:一种是单个字符“!”是一个感叹号,在这种情况下,针对“!”进行测试或者感叹号由多个字符组成的序列表示,但如果是这样,定义也没有帮助,因为单个字符之间的比较是行不通的。在这种情况下,您必须与一系列字符进行比较。因此,您需要类似于is_感叹号的函数,而不是将字符与define进行比较