我有以下代码,但它只读取小写字母。理想情况下,它会读取大写和小写字母,然后将此信息存储在数组中。欢迎任何帮助或建议。
干杯。
答案 0 :(得分:2)
上面的代码有几个问题但是直接回答你的问题,只需在增加letterCount之前做一些检查
if ( letter >= 'a' )
letterCount[int(letter)-'a']++;
else
letterCount[int(letter)-'A']++;
重要提示:
这不是将数组初始化为零,它只是将第一项设置为零,然后其余为垃圾。
int letterCount[26] = {0};
要将整个数组设置为零,您必须使用for循环进行迭代并将每个数组设置为0,手动将其键入为{0,0,0,26次...},或使用memset()马上清除它。
答案 1 :(得分:0)
可能与您手头的任务无关,但您可能会发现有趣的是,在C ++ 11中,您可以使用更少的代码执行相同的操作:
#include <map>
#include <iterator>
#include <fstream>
#include <algorithm>
#include <cctype>
int main(int /*argc*/, char* /*argv*/[])
{
std::map<char,int> counts;
std::ifstream test("test.txt");
if( test ) {
std::for_each(std::istreambuf_iterator<char>(test),
std::istreambuf_iterator<char>(),
[&counts](char c) { if( std::isalpha(c) ) ++counts[c]; });
}
}
上面的代码填写地图而不是矢量。在这种情况下,对于特定字母,地图比矢量更慢。您可以使用向量而不是地图,但这会添加更多后台处理代码,这些代码与任务无关。如果必须的话,我很可能只是将地图复制到矢量中。
在之前的标准中,你仍然可以完成同样的事情,只有你用函数对象替换lambda函数。这可能会增加3行代码。