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可提高可移植性: