【问题标题】:How to compare a vector of const char[]如何比较 const char[] 的向量
【发布时间】:2013-12-04 02:04:04
【问题描述】:

我有一个由 const char[] 组成的向量,我希望能够检查每个字符数组是否等于向量中的其余部分。因此,如果这是我初始化的方式,然后我将随机 const char[] 分配给向量数组的 5 个部分,我如何在不使用 == 的情况下比较它们?

const char sled[]="sled";
const char car[]="car";
const char house[]="house";
const char dog[] ="dog";
vector<const char[]> vect;


    if (vect[0]== vect[1]== vect[2]. == vect[3] == vect[4])
    {
    cout << "They are all equal!"
        return;
    }

【问题讨论】:

  • 也许是std::vector&lt;std::string&gt;?
  • 为什么限制使用==
  • 声明 if (vect[0]== vect[1]== vect[2] == vect[3] == vect[4]) 并没有做你认为的事情。

标签: c++ vector compare


【解决方案1】:

const char * 或 C 字符串必须与 strcmp() 进行比较。您也可以编写自己的for loop 来一一比较chars

【讨论】:

  • bool streq(char const* lhs, char const* rhs) { return strcmp(lhs, rhs) == 0; } :)
【解决方案2】:

您尝试将 C 风格的字符串与 std::vector won't even compile 一起使用,但假设您找到了使其工作的方法,以下是我将如何比较两个字符串,确保从未使用过运算符 == (考虑到strcmp 可能会在其实现中使用该运算符):

bool eq(char a, char b) {
    return !(static_cast<int>(a) - static_cast<int>(b));
}

bool are_equal(const char* a, const char* b) {
    int i = 0;
    for (; !eq(a[i], '\0'); ++i)
        if  (!eq(a[i], b[i]))
            return false;
    return (eq(b[i], '\0'));
}

here 是它执行的一个活生生的例子。现在,如果您真的希望以正确的方式做事,您可以这样做:

std::vector<std::string> vect;
vect.emplace_back("sled");
vect.emplace_back("car");
vect.emplace_back("house");
vect.emplace_back("dog");

if (std::all_of(
    vect.begin() + 1,
    vect.end(),
    [&](const std::string& s) {
        return s == vect.front();
    }
)) {
    std::cout << "They are all equal!";
}

here 也是一个活生生的例子。

祝你编码愉快。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 2021-12-31
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多