gpt4 book ai didi

c++ - 字符串与特殊字符的匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:50 24 4
gpt4 key购买 nike

我需要生成一个可以匹配另一个都包含特殊字符的字符串。我写了我认为会是一个简单的方法,但到目前为止,没有任何东西能给我一个成功的匹配。

我知道 C++ 中的特殊字符前面有一个“\”。例如,单引号将写为“\'”。

string json_string(const string& incoming_str)
{
string str = "\\\"" + incoming_str + "\\\"";
return str;
}

这是我要比较的字符串:

bool comp = json_string("hello world") == "\"hello world\"";

我可以在 cout 流中看到,实际上我正在根据需要生成字符串,但比较结果仍然是 false 值。

我错过了什么?任何帮助将不胜感激。

最佳答案

一种方法是过滤一个字符串并比较这个过滤后的字符串。例如:

#include <iostream>
#include <algorithm>

using namespace std;

std::string filterBy(std::string unfiltered, std::string specialChars)
{
std::string filtered;

std::copy_if(unfiltered.begin(), unfiltered.end(),
std::back_inserter(filtered), [&specialChars](char c){return specialChars.find(c) == -1;});

return filtered;
}

int main() {
std::string specialChars = "\"";
std::string string1 = "test";
std::string string2 = "\"test\"";

std::cout << (string1 == filterBy(string2, specialChars) ? "match" : "no match");

return 0;
}

输出是匹配。如果您向 specialChars 添加任意数量的字符,此代码也有效。

如果两个字符串都包含特殊字符,还可以将string1通过filterBy函数。然后,像这样:

"\"hello \" world \"" == "\"hello world "

也会匹配。

如果比较对性能至关重要,您可能还会使用两个迭代器进行比较,得到 log(N+M) 的比较复杂度,其中 N 和 M 分别是两个字符串的大小。

关于c++ - 字符串与特殊字符的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com