C++ 如何将一个字符数组映射到另一个字符数组?

C++ 如何将一个字符数组映射到另一个字符数组?,c++,arrays,list,C++,Arrays,List,我试图将一个字符列表映射到另一个字符列表,然后相应地转换字符串。为了做到这一点,我需要添加域和范围进行转换 我编写了一个名为“charConvert”的函数,它检查输入字符是否是预定义字符之一,如果是,则用目标值更改其值。它通过大量的ifs来实现这一点,我想用数组(或更有效的方法)来实现这一点 对于这种映射问题,还有更聪明的解决方案吗?如果所有字符都是单字节char,那么一般可以使用256元素静态无符号char[]将一个字符映射到另一个字符 例如,这种方法用于取DNA序列的反向补码的C函数。下表

我试图将一个字符列表映射到另一个字符列表,然后相应地转换字符串。为了做到这一点,我需要添加域和范围进行转换

我编写了一个名为“charConvert”的函数,它检查输入字符是否是预定义字符之一,如果是,则用目标值更改其值。它通过大量的ifs来实现这一点,我想用数组(或更有效的方法)来实现这一点


对于这种映射问题,还有更聪明的解决方案吗?

如果所有字符都是单字节
char
,那么一般可以使用256元素
静态无符号char[]
将一个字符映射到另一个字符

例如,这种方法用于取DNA序列的反向补码的C函数。下表列出了核苷酸与它们的相互作用:

要获得与基
A
互补的基(或“字母”),可以将其称为:

unsigned char complementary_base = seq_comp_table[(uint8_t)'A']; /* T */

如果您使用的是多字节字符,则可以使用
std::map

是的,索引到结果数组中是最快的。在x86这样的体系结构中,它基本上简化为一条从内存读取结果的指令

特别是,如果您不需要所有字符,通常情况下,可以按起始字符进行偏移,如下所示:

char charConvert(char b)
{
    static constexpr char mapping[] = {
        'x', // for 'a'
        'y', // for 'b'
        'z', // for 'c'
    };

    // Assuming ASCII (fine in most environments, but not guaranteed)
    return mapping[b - 'a'];
}
至少在调试模式下,添加越界检查是个好主意。

为简单起见:

// Array of all possible letters:
int encode = [62];

// Adding to array:
encode['A'-'A'] = 'q';
encode['f'-'A'] = 'g';
// etc

// Pulling from array:
printf("%c\n", encode['f'-'A']);

您可以设置a并根据需要的映射对其进行初始化应该做什么?@erip
b='b'
没有特殊意义
b
是我使用的char变量名,
'b'
是我要分配给char变量的字符。我同意我选择的名字远不是解释性的,但代码并不是最终的形状。我的观点是,赋值没有任何作用。您正在返回一个字符,而不是更新引用。
char charConvert(char b)
{
    static constexpr char mapping[] = {
        'x', // for 'a'
        'y', // for 'b'
        'z', // for 'c'
    };

    // Assuming ASCII (fine in most environments, but not guaranteed)
    return mapping[b - 'a'];
}
// Array of all possible letters:
int encode = [62];

// Adding to array:
encode['A'-'A'] = 'q';
encode['f'-'A'] = 'g';
// etc

// Pulling from array:
printf("%c\n", encode['f'-'A']);