我需要将一个字母a-z字符存储到c ++中0到25大小的相应插槽中。没有很多if语句,最好的方法是什么?
答案 0 :(得分:4)
您可以通过以下方式确定角色指数:
int index = yourCharacter-'a';
然后使用该索引存储您需要的内容
答案 1 :(得分:2)
要计算索引,只需从包含字符a-z的char变量中减去'a'。例如:
char c='x';
int index=(int)(c-'a');
答案 2 :(得分:2)
这是你在寻找什么?
char c;
...
arrayName[c - 'a'] = value;
答案 3 :(得分:2)
修改强> 不是作业,所以我会澄清我的答案。
const char * letters = "abcdefghijklmnopqrstuvwxyz";
将数字中的字母“a”存储到“z”中。 (请注意,由于字符串末尾的空字符,数组大小为27而不是26。)
答案 4 :(得分:1)
字符只是整数,所以你可以对它们进行算术运算。
char c = ...;
array[c - 'a'] = c.
请注意,大写字符与小写字符不同,因此您需要单独处理它们(如果需要)。
if (c >= 'A' && c <= 'Z')
c += 'a' - 'A'; // make lower case
答案 5 :(得分:1)
如果您想要便携,则无法使用大多数人提出的解决方案
其他:'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.
请注意- 1
和end
的{{1}}:这是因为size
有
最后增加letters
。
请注意,在很多情况下,在现代机器上,它可能更简单 使用256个条目的数组;空间的差异不太可能 导致内存不足,管理它的代码将会很多 简单。
答案 6 :(得分:0)
char letters[26];
for (char c = 'a'; c <= 'z'; c++)
{
letters[c - 'a'] = c;
}