【问题标题】:In C++ how do I insert strings into a set?在 C++ 中,如何将字符串插入集合中?
【发布时间】:2022-08-14 23:23:19
【问题描述】:
#include <iostream>
#include <iomanip>
#include <string>
#include <set>

int main(){
    
    std::string text;
    std::getline(std::cin, text);
    
    std::set<std::string> filter;
    
    for(int i = 0; i< text.length(); i++){
        filter.insert(text[i]);
    }
}

我的代码出现错误,它说:

没有已知的参数 1 从 \'__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type\' {aka \'char\'} 到 \'std::initializer_list<std::__cxx11: :basic_string<字符>>\'

我需要将每个转换为char,然后插入到集合中吗?

  • 你能用简单的英语用几个例子来描述你的程序应该做什么吗?如果你被要求设计一款新车型,仅仅将最终结果描述为“踩下油门踏板前进”是不够的。
  • 您希望您的集合包含单词(字符串)还是字母(字符)?

标签: c++ set


【解决方案1】:

您正在尝试将单个 char 值插入到 std::setstd::string 值中,因此 set::insert() 期望您将 std::stringstd::initializer_list&lt;std::string&gt; 作为输入。但是其中任何一个都不能从单个char 构造,因此会出现错误。

但是,std::string 确实有另一个构造函数,它以 char 和计数作为输入,例如:

std::set<std::string> filter;
    
for(int i = 0; i < text.length(); i++){
    filter.insert(std::string(1, text[i]));
}

否则,请改为创建 std::setchar 值:

std::set<char> filter;
    
for(int i = 0; i < text.length(); i++){
    filter.insert(text[i]);
}

【讨论】:

  • 第一个解决方案使用emplace:filter.emplace(1, text[i]); 更简洁,但我看到了您想通过显式 ctor 调用来说明的要点。
【解决方案2】:

text[i] 是字符而不是字符串,

如果你想把输入分成几个单词,你需要自己做。

如果这就是你想要的,那么要么

  • 在循环中使用cin&gt;&gt;word,这将为您挑选单个单词,而不是 getline 将整个输入读取为一个字符串
  • 在文本上创建stringstream 并在其上使用ss&gt;&gt;word
  • 或通过字符跳过空白来遍历文本字符(最繁琐的方式)

【讨论】:

    【解决方案3】:
    set<string> sl(s.begin(), s.end()); //s is string.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多