- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
代码解析字符串输入的最简单方法是什么,如下所示:
WORD WORD2
WORD3 WORD4
WORD5
WORD6
也就是说,未知数量的单词对后跟一个空行,然后是每行一个未知数量的单词。我想将这些单词的第一组放入映射中,将第二组单词放入 vector 中。
使用 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 */ }
同样,您可以根据需要添加检查文件的第二部分是否包含空格。最后,您可以对 map 使用 insert()
来检查没有重复键;在 C++11 中,您应该可以说 m.emplace(std::move(x), std::move(y));
。 unordered_map
对字符串的处理效率可能更高。
关于编程竞赛的 C++ 阅读输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12629218/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在开发一个项目,该项目允许用户作为访客或注册用户加入。 有应用范围user具有当前用户类型的 LiveData 的对象 private val _isGuest = MutableLiveData
我正在创建一个应用程序来帮助我们的团队管理 Twitter 竞赛。到目前为止,我已经成功地与 API 进行交互,并返回了一组我需要的推文。 我正在努力决定处理数据库中推文存储的最佳方式、检查它们的频率
我在处理这段特殊代码时遇到了一些麻烦。它要么存在竞争条件,要么存在 quint8 问题。 quint8 chunk3[CHUNK_SIZE_MULT]; memset(chunk3,0x00, siz
我有一个带有 background.js 的 Chrome 扩展程序,其中收集和存储有关页面的信息, chrome.webRequest.onCompleted.addListener( func
我在我的应用程序中遇到了竞争条件,每当我暂停调试时,所有或除 1 个线程外的所有线程都会卡在 syscall_thread_switch 上。它在模拟器上更频繁地重现,但在 iPad Air 上也是如
我有一个简单的包,用于在程序运行期间记录统计信息,我发现 go run -race 说其中存在竞争条件。查看该程序,我不确定每次读写都受互斥锁保护时如何出现竞争条件。谁能解释一下? package c
我是一名优秀的程序员,十分优秀!