【问题标题】:c++/c data structures for storing strings separated by blanks用于存储由空格分隔的字符串的 c++/c 数据结构
【发布时间】:2020-07-04 19:13:02
【问题描述】:

什么是存储的最佳数据结构 用空格分隔的字符串

变量 peers 包含由空格分隔的字符串列表 每个这样的字符串都具有 host:port 的形式,其中 host 是主机名(点分十进制表示法的 DNS 名称或 IP),port 是正数。

在列表中我可能有类似的东西 127.0.0.1:8080 127.3.0.1:9080 127.0.0.1:3000 127.3.0.1:9080

处理这类数据的最佳方法是什么, 任何代码示例 创建这个变量“peers”

【问题讨论】:

  • C 还是 C++?两者是不同的(因此,两者都会有不同的程序实现方式)。另外,您想将 host:port 分隔为不同的变量吗?
  • 我认为实际上任何(字符串)集合都符合条件。还是你的意思是如何解析?
  • @RohanBari hi Rohan 一切都存储在一个名为 peers 的变量中,只要我能处理好,c++ 和 c 都可以

标签: c++ c data-structures


【解决方案1】:
#include <sstream>
#include <vector>
#include <string>    

std::stringstream iss { str };
std::vector<std::string> peers;

std::string tmp;
while (iss >> tmp)
    peers.push_back(tmp);

【讨论】:

    【解决方案2】:

    假设各个部分中只有正确的 IP 地址和端口号,它们不超过 21 个字符,因此可以将数据保存为(固定长度)字符串数组:

    char peers[][21] = {"127.0.0.1:8080", "127.3.0.1:9080", "127.0.0.1:3000", "127.3.0.1:9080"};
    

    这种变体的优点是可以通过数组索引直接访问条目:

    for (int i=0; i<4; i++)
        printf("%s\n", peers[i]);
    

    【讨论】:

    • 问题是“DNS 名称或 IP”,所以这个答案背后的假设可能是没有根据的。
    【解决方案3】:

    存储字符串的最佳数据结构是什么 空格

    这完全取决于您将如何访问这些数据。你会用某种ID来称呼它吗?如果是,您可以将 map 用于已排序的数据或使用无序的 map 而不对其进行排序。你打算使用 id 访问元素吗?那么也许向量就足够了。在你开始之前知道字符串的数量吗?考虑使用数组。关于访问,您可以将所有数据保存在一个字符串中,并且只需知道哪个空白是哪个 IP。您还可以解析字符串并将它们保存到数组/向量中。如果您不想通过 ID 而是通过它的值访问数据(同时确保它在容器内),请将它的值设置为 key 并使用 set。如果你想把它们保存在容器中,不要通过 id 访问,你不知道你将持有多少个项目,可以使用 list 或 forward_list。这完全取决于如何处理数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多