C ++程序 - 输入文本流

时间:2017-04-04 06:48:09

标签: c++ file-io io

我是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;
}

所以,基本上我要问的是如何修改这个程序,或者使它接受一串文本(或类似的东西)并计算每个字符的出现次数?

3 个答案:

答案 0 :(得分:0)

您可以使用std::getline允许从std::cin输入一行,然后以类似于您现有的方式处理它。为简单起见,我:

#include <iostream>
#include <string>
#include <map>

int main() {
    std::map<char, size_t> count;

    std::string s;
    std::getline(std::cin, s);

    for (char i : s)
    {
        ++count[i];
    }

    for (auto i : count)
    {
        std::cout << i.first  << " : " << i.second << std::endl;
    }
}

在线here

答案 1 :(得分:0)

如果你想一想,它实际上非常简单:

if (view.getButtonVisibleState() == false) then
myButton.isHidden = true
else 
myButton.isHidden = false

答案 2 :(得分:0)

如果你需要获取字符串作为参数:

int main(int argc, char*argv[])
{
    CharacterCounter lCounter;

    string str;
    if (argc >= 2)
    {
       std::string temp(argv[1]);
       str = temp;
    }

   for (size_t i = 0; i < str.size(); i++)
   {
        lCounter.count( str[i]);
   }
}