C++比较最多 "%" 个字符的字符串

C++ compare strings up to "%" char

本文关键字:字符 字符串 C++ 比较      更新时间:2023-10-16

我想在比较字符串到"%"符号C++实现字符串比较。

我可以这样做:

std::equal(str1.begin(), 
           std::find(str1.begin(), str1.end(), L'%'),
           str2.begin());

由于我在许多字符串的循环中执行此操作,因此我想知道是否有一种方法没有用于findequal的两个不同的字符串遍历(可能带有可以随时中止比较的谓词)。提升是可以的。

你可以试试std::mismatch .
以下代码将使用 C++14 运行(它需要具有两个迭代器对的模板重载),但它在 C++11(或 03,但没有 lambda)中的工作方式非常相似:

auto iters = std::mismatch( str1.begin(), str1.end(), str2.begin(), str2.end(), 
                     [] (char lhs, char rhs) {return lhs != '%' && lhs == rhs;});

if (iters.first  == str1.end()
 || iters.second == str2.end()
 || *iters.first == '%')
    // Success […]

演示

这是一种黑客方法:

auto it = std::find_if(
  str1.begin(), str1.end(),
  [&str2](const char &c) {
    return c == '%' || str2[&c - &str1[0]] != c
  }
);
bool equal = (it == str1.end() || *it == '%');

这个想法是创建一个谓词"字符与另一个字符串中的字符相同,而不是'%' "。

它依赖于str2足够长,但问题中的代码也是如此。