所以我有一个用于计算文本文件中不同字符的代码,我不太明白下一节中底部代码行的作用:
string linje;
int nLetters = 'Z' - 'A' +1;
vector<int> bokstaver(nLetters, 0);
int antallTegn = 0;
while(getline(inputfile, linje)){
for(char tegn:linje){
if(isLetter(tegn)){
antallTegn++;
bokstaver[tolower(tegn)-'a']++;
我知道它将tegn变量转换为小写但我不明白为什么我们必须减去'a'。
答案 0 :(得分:0)
在计算机中使用字符代码表示字符。
例如,代表a
的字符代码在ASCII代码中为0x61(97)。
因此,您必须减去'a'
(a
的字符代码),以便将输入字符串中的字符代码转换为从零开始的向量的索引。
当字母的字符代码是连续的时,此方法将起作用。 ASCII码满足这个条件。
答案 1 :(得分:0)
字符由计算机中的整数表示。每个整数值代表一个字符(使用UNICODE会变得更复杂,但这超出了这个问题的范围)。因此,'a'具有数值,A^@..B
也是如此。
数字可以被认为是一行数字,其中值是该行上数字的位置。类似地,数字编码的字符可以被认为是一行中的字符,其数值是它们的位置。
一个数字行:
tolower(tegn)
字符行:
0 1 2 3 4
两个数字的减法类似于它们在数字线上的距离。同样,减去两个字符就是它们在字符行上的距离。
因此,, . - a b c d
是一个数组,其索引是字符行上的位置,偏移字符bokstaver
的位置。