Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;操纵ASCII中的数字,使其仅停留在字母范围内 #包括 使用名称空间std; Int main(){ 库特_C++_Ascii - Fatal编程技术网

C++ C++;操纵ASCII中的数字,使其仅停留在字母范围内 #包括 使用名称空间std; Int main(){ 库特

C++ C++;操纵ASCII中的数字,使其仅停留在字母范围内 #包括 使用名称空间std; Int main(){ 库特,c++,ascii,C++,Ascii,这将打印:c c的ASCII值比a多2个。您可以使用'x'符号直接对ASCII字符进行测试。此外,您还可以分别使用&&(“和”): 最可靠的方法是为每个类别使用一个表,然后 你的算术在它的索引上,以表的大小为模。 因此,对于小写字母,您可以执行以下操作: if (std::isalpha(letter)) { // Letter is between 'a' and 'z' or 'A' and 'Z' } else { // Error! Letter is not betw

这将打印:
c


c
ASCII
值比
a

多2个。您可以使用
'x'
符号直接对ASCII字符进行测试。此外,您还可以分别使用&&(“和”):


最可靠的方法是为每个类别使用一个表,然后 你的算术在它的索引上,以表的大小为模。 因此,对于小写字母,您可以执行以下操作:

if (std::isalpha(letter)) {
    // Letter is between 'a' and 'z' or 'A' and 'Z'
} else {
    // Error!  Letter is not between 'a' and 'z' or 'A' and 'Z'
}
char
transcode( char original )
{
    char results = original;
    static std::string const lower( "abcdefghijklmnopqrstuvwxyz" );
    auto pos = std::find( lower.begin(), lower.end(), results );
    if ( pos != lower.end() ) {
        int index = pos - lower.begin();
        index = (index + 2) % lower.size();
        results = lower[ index ];
    }
    return results;
}
char
transcode( char original )
{
    char results = original;
    if ( results >= '0' && results <= '9' ) {
        char tmp = results - '0'
        tmp = (tmp + 2) % 10;
        results = tmp + '0';
    }
    return results;
}
此解决方案是通用的,无论集合如何,都可以工作 要处理的字母数。对于数字(以及大写和小写) 小写,如果您不太担心可移植性),您可以 可以利用代码点是 然后,执行以下操作:

if (std::isalpha(letter)) {
    // Letter is between 'a' and 'z' or 'A' and 'Z'
} else {
    // Error!  Letter is not between 'a' and 'z' or 'A' and 'Z'
}
char
transcode( char original )
{
    char results = original;
    static std::string const lower( "abcdefghijklmnopqrstuvwxyz" );
    auto pos = std::find( lower.begin(), lower.end(), results );
    if ( pos != lower.end() ) {
        int index = pos - lower.begin();
        index = (index + 2) % lower.size();
        results = lower[ index ];
    }
    return results;
}
char
transcode( char original )
{
    char results = original;
    if ( results >= '0' && results <= '9' ) {
        char tmp = results - '0'
        tmp = (tmp + 2) % 10;
        results = tmp + '0';
    }
    return results;
}
在上面的
if
中。这两个解在数学上是一致的 相当于

这只保证对数字有效,但通常 如果你把自己限制在最大的范围内,那就用大写或小写 原始ASCII字符集。(请注意,当今大多数系统
支持扩展字符集。)

怎么了?@IInspectable完全没有问题,我只是认为初学者应该在走路之前学会爬行。无论如何,我会把它作为附录添加,谢谢!@IInspectable最初的海报提到了一些事情,比如给数字加上一个值,这表明他期待的是一个连续的集合。
std::I不能保证这一点salpha
,除非你在
“C”
地区(通常不是我工作过的地方),结果将不是一个连续的集合。@IInspectable当然,如果
letter
的类型为
char
,则使用它调用
std::isalpha
的单参数版本是未定义的行为。@James我看不到未定义的行为。当然,从
char
int
的整数类型升级是可以定义的ned.我遗漏了什么?如果
letter
ee
?提示:像'a'和'a'这样的字符文字是实际计算符号的ASCII码的快捷方式。因此
char c1='',c2=32,c3=0x20;
都产生具有相同ASCII码的字符。
char
transcode( char original )
{
    char results = original;
    if ( results >= '0' && results <= '9' ) {
        char tmp = results - '0'
        tmp = (tmp + 2) % 10;
        results = tmp + '0';
    }
    return results;
}
results = results + 2;
if ( results > '9' ) {
    results -= 10;
}