C++:C 字符串集

标签 c++ string set

我想创建一个,以便我可以使用 set::find 检查某个单词是否在集合中

但是,C 字符串是指针,因此默认情况下集合会根据指针值比较它们。要正常运行,它必须取消引用它们并比较字符串。

我可以向构造函数传递一个指向 strcmp() 函数的指针作为比较器,但这并不是我想要的工作方式。我可能想要检查的词可能是较长字符串的一部分,并且出于性能方面的考虑,我不想创建新字符串。如果没有集合,我会使用 strncmp(a1, a2, 3) 检查前 3 个字母。事实上,3 可能是最长的,所以我可以接受第三个参数常量。

有没有办法构造一个集合,通过调用 strncmp() 来比较其元素?代码示例将不胜感激。

这是我想做的伪代码:

bool WordInSet (string, set, length)
{
   for (each word in set)
    {
       if strncmp(string, word, length) == 0
            return true;
    }
    return false;
}

但我更愿意使用标准库函数来实现它。

最佳答案

您可以创建一个比较器函数对象。

struct set_object {
    bool operator()(const char* first, const char* second) {
        return strncmp(first, second, 3);
    }
};

std::set<const char*, set_object> c_string_set;

然而,制作一组 std::strings 会更容易、更可靠。 .

关于C++:C 字符串集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530543/

相关文章:

c# - 从 C++ 反序列化 protobuf 并在 C# 中重新序列化给出不同的输出

c++ - 可移植的方式(linux 和 Windows)使文件只能由 1 个进程修改,而不能由 C/C++ 中的其他进程修改

c++ - 在专用模板函数中使用通用模板类

java - Java 中的树集

windows - 批处理脚本中 Set/p 的默认值

c++ - Worker/Controller 多线程和接口(interface)类

c - 使用 strncpy 和 strncat 的奇怪输出

c# - c#中的简单编辑字符串

java - System.in.read() 行为我无法解释

linux - FD_ISSET 在 FD_SET 之后返回 0