gpt4 book ai didi

编程竞赛的 C++ 阅读输入

转载 作者:太空狗 更新时间:2023-10-29 20:28:39 24 4
gpt4 key购买 nike

代码解析字符串输入的最简单方法是什么,如下所示:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com