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