C++程序 - 输入文本流
C++ Program - input text stream
我是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]);
}
}
相关文章:
- 2D数组来自文本输入,中间有空格
- 读取字符串文本输入以创建 2D 矢量
- 是否可以将来自 Win32 EDIT 控件的文本输入存储在C++ std::string 中?
- 是否可以使用 select(2) 来监视 SDL 文本输入事件
- 读取整数对,直到文本输入文件中的换行符
- C++文本输入
- 如何将文本输入到字符串数组中
- C++如何使用文本输入和If语句打开应用程序
- 将文本输入中的字符串拆分为更小的字符串
- 如何在win32窗口中创建嵌入式文本输入框
- OpenCV,在显示图像时读取用户文本输入(使用 waitKey)
- 计算文本输入中特定字符的频率
- 使用开发C++将文本输入框添加到 C++ GUI
- Qt-使用用户文本输入直接指向文件夹
- 使用SendMessage将文本输入到属于另一个进程的编辑控件中
- 如何将dateTimeFromText更改为仅允许分钟%15或禁用手动文本输入
- C++:在给定以下文本输入的情况下,求有向图的阶数
- SFML 2实时文本输入?(无事件循环)
- SFML文本输入不能正常工作
- c++控制台自由文本输入(具有最大字符大小)