【发布时间】:2017-08-29 05:39:18
【问题描述】:
我是 C++ 新手,我得到了一个示例程序,它应该能够计算给定输入文本流中每个可打印非空白字符的出现次数。
显然,我打算用命令参数做一些事情,但是我尝试了这个,但没有得到任何输出。
这是程序:
CharacterCounter.h
#pragma once
#include <iostream>
class CharacterCounter
{
private:
int fTotalNumberOfCharacters;
int fCharacterCounts[256];
public:
CharacterCounter();
void count( unsigned char aCharacter );
friend std::ostream& operator<<( std::ostream& aOStream,
const CharacterCounter& aCharacterCounter );
};
CharacterCounter.cpp:
#include "CharacterCounter.h"
using namespace std;
CharacterCounter::CharacterCounter(): fTotalNumberOfCharacters( 0 ),
fCharacterCounts()
{}
void CharacterCounter::count( unsigned char aCharacter )
{
fCharacterCounts[aCharacter]++;
fTotalNumberOfCharacters++;
}
ostream& operator<<( ostream& aOStream, const CharacterCounter& aCharacterCounter )
{
aOStream << "Character counts for "
<< aCharacterCounter.fTotalNumberOfCharacters << " characters:"<< endl;
for ( int i = 0; i < 256; i++ )
{
if ( aCharacterCounter.fCharacterCounts[i] != 0 )
{
aOStream << (char)i << ":\t" << aCharacterCounter.fCharacterCounts[i] << endl;
}
}
return aOStream;
}
Main.cpp:
#include "CharacterCounter.h"
using namespace std;
int main()
{
CharacterCounter lCounter;
unsigned char lChar;
while ( cin >> lChar )
{
lCounter.count( lChar );
}
cout << lCounter;
return 0;
}
所以,基本上我要问的是如何修改这个程序,或者让它接受一串文本(或类似的东西)并计算每个字符的出现次数?
【问题讨论】:
-
您到底在问什么,如何使用命令行参数(互联网上有成千上万的教程和示例)?如何区分字母、数字、空白字符(this characters classification reference 应该有帮助)?或者是其他东西?请详细说明。如果您还没有这样做,请花点时间read about how to ask good questions。
-
还要注意
(char)i不好有两个原因:首先是不是您范围内的所有字符都是可打印的;第二个是因为你不应该在 C++ 中使用 C 风格的转换(使用static_cast代替,if 字符是可打印的)。