C++将char放在数组中相应的槽中

C++ place char in corresponding slot in array

本文关键字:数组 char C++      更新时间:2023-10-16

我需要将一个字母a-z-char存储到c++中一个大小为0-25的数组中的相应插槽中。在没有大量if语句的情况下,最好的方法是什么?

您可以通过以下方式确定字符索引:

int index = yourCharacter-'a';

然后使用该索引来存储您需要的

要计算索引,只需从包含字符a-z的char变量中减去'a'。例如:

char c='x';
int index=(int)(c-'a');

这就是你想要的吗?

char c;
...
arrayName[c - 'a'] = value;

编辑不是家庭作业,所以我会澄清我的答案。

const char * letters = "abcdefghijklmnopqrstuvwxyz";

将从"a"到"z"的字母存储在一个数组中。(注意,数组大小是27,而不是26,因为字符串末尾有空字符。)

字符只是整数,因此可以对它们进行算术运算。

char c = ...;
array[c - 'a'] = c.

请注意,大写字符与小写字符不同,因此需要单独处理它们(如果需要)。

if (c >= 'A' && c <= 'Z')
    c += 'a' - 'A'; // make lower case

如果你想便携,你不能使用大多数人提出的解决方案其他:'a''z'不一定是连续的。最可靠的解决方案是在表中查找字母,并使用其索引表格,例如:

char letters[] = "abcdefghijklmnopqrstuvwxyz";
int index = std::find( begin( letters ), end( letters ) - 1, ch )
        - begin( letters );
if ( index < size( letters ) - 1 )
    //  it's good
else
    //  character wasn't a (lower case) letter.

注意endsize- 1:这是因为letters具有最后添加CCD_ 8。

请注意,在很多情况下,在现代机器上,它可能只是更简单使用256个条目的数组;空间上的差异不大可能导致内存不足,管理它的代码将非常多更简单。

char letters[26];
for (char c = 'a'; c <= 'z'; c++)
{
    letters[c - 'a'] = c;
}