C++程序 - 输入文本流

C++ Program - input text stream

本文关键字:文本 输入 程序 C++      更新时间:2023-10-16

我是C++新手,我得到了一个示例程序,该程序应该能够计算给定输入文本流中每个可打印的非空格字符的出现次数。

显然,我

打算对命令参数做一些事情,但是我尝试了这个,但我没有得到任何输出。

这是程序:

字符计数器.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 );
};

字符计数器.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;
}

主.cpp:

#include "CharacterCounter.h"
using namespace std;
int main()
{
    CharacterCounter lCounter;
    unsigned char lChar;
    while ( cin >> lChar )
    {
        lCounter.count( lChar );
    }
    cout << lCounter;
    return 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;
    }
}

在线在这里

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

CharacterCounter count_string_chars( const std::string& line )
{
    CharacterCounter counter;
    for( std::size_t i = 0; i < line.size(); ++i )
    {
        counter.count( line.at(i) );
    }
    return counter;
}

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

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]);
   }
}