C++将char放在数组中相应的槽中
C++ place char in corresponding slot in array
我需要将一个字母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.
注意end
和size
的- 1
:这是因为letters
具有最后添加CCD_ 8。
请注意,在很多情况下,在现代机器上,它可能只是更简单使用256个条目的数组;空间上的差异不大可能导致内存不足,管理它的代码将非常多更简单。
char letters[26];
for (char c = 'a'; c <= 'z'; c++)
{
letters[c - 'a'] = c;
}