C++ 确定不同字符的数量

C++ 确定不同字符的数量,c++,C++,我有一个非常大的文件,包含超过一百万个字符,包括空格和换行符。我能找到一个角色出现的次数 ifstream inData; inData.open("info.txt"); char text; int achar=0; while (inData >> text) { if (text == 'a') { achar++; } } cout <&

我有一个非常大的文件,包含超过一百万个字符,包括空格和换行符。我能找到一个角色出现的次数

ifstream inData;
    inData.open("info.txt");
    char text;
    int achar=0;
    while (inData >> text)
    {
        if (text == 'a')
        {
            achar++;
        }

    }

    cout << achar;

我可以将其扩展到所有字符,但这需要60多行代码。从表面上看,使用for循环跨越字符似乎是一种解决方案。但是,文本未排序,因此无法在while循环中工作。我试图将inData插入字符串。再一次,由于有新行,它只占了文本的一部分。因此,我认为使用数组可能会有所帮助,但鉴于字符数量巨大;这不仅很难预测有多少个角色,而且还需要循环一百万次以上。显然,这不是一条明智的路线。有没有一种有效的方法

只需为计数器使用一个数组:

int count[256] = {0};
unsigned char c;
while (inData >> c) {
    count[c]++;
}

只需为计数器使用一个数组:

int count[256] = {0};
unsigned char c;
while (inData >> c) {
    count[c]++;
}

使用数组。。。每个字母对应一个条目是否区分大小写?是的,应区分大小写字母。请记住:1MB不是一个真正大的文件。所有现代操作系统都允许文件大于2GB,因此应相应地定义字符数。使用数组。。。每个字母对应一个条目是否区分大小写?是的,应区分大小写字母。请记住:1MB不是一个真正大的文件。所有的现代操作系统都允许文件大于2GB,所以应该相应地定义字符数。哇,这太短了。要是我一开始就这么想就好了。InData逐个读取每个字符,对吗?或者,std::map count;char ch;而inData.getch++count[ch];。这种方法可能更容易使用结果计数,这取决于您打算做什么。此外,将256更改为UCHAR_MAX+1增加了可移植性:哇,这是令人印象深刻的短。要是我一开始就这么想就好了。InData逐个读取每个字符,对吗?或者,std::map count;char ch;而inData.getch++count[ch];。这种方法可能更易于使用结果计数,具体取决于您打算执行的操作。此外,将256更改为UCHAR_MAX+1可提高可移植性: