对我早期版本this answer的评论提醒我,我不能假设'A'
,'B'
,'C'
等。有连续的数值。我有点假设C或C ++语言标准保证这是事实。
那么,我应该如何确定连续的字母字符'价值观本身是连续的?或者更确切地说,我如何确定单引号中可以表达的字符常量是否具有数字值的ASCII代码?
我在C和C ++中都询问如何做到这一点。显然C语言也可以在C ++中运行,但如果有一个C ++就可以做到这一点,我也对此感兴趣。另外,我询问最新的相关标准(C11,C ++ 17)。
答案 0 :(得分:6)
您可以使用预处理器检查特定字符是否映射到字符集:
#include <iostream>
using namespace std;
int main() {
#if ('A' == 65 && 'Z' - 'A' == 25)
std::cout << "ASCII" << std::endl;
#else
std::cout << "Other charset" << std::endl;
#endif
return 0;
}
缺点是,您需要事先知道映射的值。
数字字符'0'
- '9'
保证以连续顺序显示BTW。
答案 1 :(得分:0)
...(2)我希望能够获得两个字母之间的字母数量距离......
此评论指明您的目标比您的实际问题更有意义!为什么你没有问过这件事?您可以对字符数组使用strchr
,而strchr
并不关心本机字符集是什么,这意味着您的代码无法关注本机字符集是什么。例如:
char alphabet[] = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
ptrdiff_t fubar = strchr(alphabet, 'y') - strchr(alphabet, 'X');
printf("'X' and 'y' have a distance of %tu and a case difference of %tu\n", fubar / 2, fubar % 2);
...我应该如何确定连续的字母字符&#39;价值本身是连续的吗?
连续的字母字符&#39;根据定义,值是连续的,因为它们是连续的字母字符。我知道这不是你的意思,但你的实际问题表明缺乏计划和思考,而且...一个愚蠢的问题需要一个愚蠢的回答。
您的编程方式要好得多,因为您不关心他们拥有的价值。尽管如此,创建一个包含您关注的字符的数组,遍历元素并测试不一致性。例如:
int is_consecutive(char const *alphabet) {
for (size_t x = 0; alphabet[x] && alphabet[x] + 1 == alphabet[x + 1]; x++);
return !alphabet[x];
}
...如何确定我在单引号中表达的字符常量是否具有数字值的ASCII码?
再次缺乏理智,再次关注价值观......或者,建立两个翻译表,native_to_ascii
和ascii_to_native
,然后从那里开始。我不会帮助你,因为这是一个愚蠢的练习,涉及使用魔法数字,这很可能对你的实际目标来说是不必要的。