c++ - 将数组匹配分配给字符串

标签 c++

我的程序有两个存储数组和一个未分配的字符串:

std::string array1 = "red blue green white";
std::string array2 = "white purple yellow red";
std::string str = "";

我可以使用 array1.find(array2) 来查找是否存在匹配项,但我如何获得该匹配项并将匹配项分配给 std::string str.

寻找如下所示的解决方案:

if (array1.find(array2)) str = match;

最佳答案

您可以使用 string::substr 和 for 循环来查找匹配的条目。

例子:

std::string theString = "red blue green white";
std::vector<std::string> vectStr = {"white", "purple", "yellow", "red"};
std::string match = "";

for(auto &str : vectStr)
{
    auto pos = theString.find(str);
    if(pos != std::string::npos)
    {
         match = theString.substr(pos, str.length());
    }
}

然后你可以做一个基本的检查,如果字符串在循环后仍然是空的,这意味着 - 不匹配。 这将为您提供字符串中的最后一场比赛。如果需要该行为,您可以在 if 语句中提前返回以获得第一个匹配项。

如果您最初无法创建 vector (参数作为一个完整的字符串出现),您可以拆分字符串并创建 vector (如果有分隔符 - 例如,空格)。 由于我不知道标准的 string::split,您可以使用 boost 或自己实现。那里有很多例子。

关于c++ - 将数组匹配分配给字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46125737/

相关文章:

c++ - 标签文本更改时如何发出信号?

c++ - 当互斥锁/解锁深埋在函数调用中时,我是否需要栅栏或屏障或其他东西?

c++ - 通过注册表更改鼠标设置后刷新 Windows

c++ - #include <iostream.h> 和#include <iostream> 之间有什么区别?

c++ - 对等体断开连接后 SSL 内存未释放

c++ - 从文本文件读取,然后写入 QT 中的同一文件(高分功能)

c++ - 无法将字符串数组声明为类成员

c++ - 我可以通过指针传递数组而不传递大小吗?

c++ - 如何检查文本文件中的特定行是否以特定单词开头

c++ - 为什么可以将枚举作为函数变量传递但不能返回枚举?