C++编程竞赛的阅读输入
C++ reading input for programming contests
代码解析字符串输入的最简单方法是什么,如下所示:
WORD WORD2
WORD3 WORD4
WORD5
WORD6
也就是说,未知数量的单词对后跟一个空行,后跟未知数量的单词,每行一个。 我想把第一组单词放到一个地图中,把第二组词放到一个向量中。
使用 getline
在发现第一组配对单词何时终止时存在问题。
使用getline
和一些容器的简单问题:
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <map>
std::map<std::string, std::string> m;
std::vector<std::string> v;
for (std::string line; std::getline(std::cin, line); )
{
if (line.empty()) { break; }
std::string x, y;
std::istringstream iss(line);
if (!(iss >> x >> y >> std::ws)) { /* fatal error */ }
m[x] = y;
}
for (std::string line; std::getline(std::cin, line); )
{
v.push_back(std::move(line));
}
std::cout << "We read " << m.size() << " pairs and " << v.size() << " words.n";
如果要确保文件的第一部分精确地由单词对组成,中间有一个空格区域,则可以将条件增强为:
if (!(iss >> x >> y >> std::ws) || iss.get() != EOF) { /* fatal error */ }
同样,如果您愿意,可以添加检查文件的第二部分不包含空格。最后,您可以使用映射的insert()
来检查是否有重复的键;在 C++11 中,您应该能够说m.emplace(std::move(x), std::move(y));
.使用字符串时,unordered_map
可能更有效。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- 如何对并行键盘输入进行编程
- C :对输入验证函数进行编程的性能影响可以对其进行编程,而每次都可以将其编程
- 以编程方式输入新行
- 用户定义的功能用于竞争编程中,以获取输入
- C 编程从外部输入文件定义数组大小
- C++编程竞赛的阅读输入
- C++:以编程方式初始化输入
- 竞争性编程中的快速输入/输出
- 编辑非常大输入的距离动态编程
- 从输入中获取一个数字和一个单位作为双精度和字符串——编程:使用c++的原则和实践
- 我如何处理输入/输出格式的竞争性编程网站,如SPOJ
- c++遗传编程:调用链接器/编译器,执行编译后的程序和管道输入/输出