C++比较最多 "%" 个字符的字符串
C++ compare strings up to "%" char
我想在比较字符串到"%"符号C++实现字符串比较。
我可以这样做:
std::equal(str1.begin(),
std::find(str1.begin(), str1.end(), L'%'),
str2.begin());
由于我在许多字符串的循环中执行此操作,因此我想知道是否有一种方法没有用于find
和equal
的两个不同的字符串遍历(可能带有可以随时中止比较的谓词)。提升是可以的。
你可以试试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
足够长,但问题中的代码也是如此。
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数