初学者:向量中的tolower

时间:2017-08-15 13:48:02

标签: c++

所以我有一个用于计算文本文件中不同字符的代码,我不太明白下一节中底部代码行的作用:

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'。

2 个答案:

答案 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的位置。