C++ 需要比较字符串的某些元素

C++ 需要比较字符串的某些元素,c++,string,inheritance,C++,String,Inheritance,我们一直在开发这个程序,它需要使用一个函数来比较用户输入的字符串,并让用户有机会从输入中保留他/她不知道的字符,将它们替换为*。输入表示具有6个字符(例如ABC123)的汽车牌照,并且允许用户保留其中任何字符(例如AB**23或**C12*等)。。因此,该函数需要返回与正确位置的字符匹配的所有对象,但如果(比如)A位于正确位置,但其他任何字符不在,则该函数无法返回。但是,例如,用户只能输入*****,并且函数应该返回第一个位置上有A的所有对象。 我所做的是使用一个函数删除输入字符串中的所有星号,

我们一直在开发这个程序,它需要使用一个函数来比较用户输入的字符串,并让用户有机会从输入中保留他/她不知道的字符,将它们替换为*。输入表示具有6个字符(例如ABC123)的汽车牌照,并且允许用户保留其中任何字符(例如AB**23或**C12*等)。。因此,该函数需要返回与正确位置的字符匹配的所有对象,但如果(比如)A位于正确位置,但其他任何字符不在,则该函数无法返回。但是,例如,用户只能输入*****,并且函数应该返回第一个位置上有A的所有对象。 我所做的是使用一个函数删除输入字符串中的所有星号,然后创建子字符串并将它们作为向量发送给函数

    string removeAsterisk(string &rStr)// Function to remove asterisks from the string, if any.
    {
        stringstream strStream;
        string delimiters = "*";
        size_t current;
        size_t next = -1;
        do
    {
         current = next + 1;
         next = rStr.find_first_of( delimiters, current );
         strStream << rStr.substr( current, next - current ) << " ";
}
while (next != string::npos);

return strStream.str();
}

当前接收向量的类函数如下所示:

    void VehicleRegister::showAllLicense(vector<string>& tokens)//NOT FUNCTIONAL
    {
        cout << "\nShowing all matching vehicles: " << endl;
        for (int i = 0; i < nrOfVehicles; i++)
        {

            if(tokens[i].compare(vehicles[i]->getLicensePlate()) == 0)
            {
                cout << vehicles[i]->toString() << endl;
            }
        }
    }
如果有人明白我在做什么,可能有一些想法,请随时回复,我将感谢任何建议。
感谢您阅读此/A.

只需反复阅读字符,一次比较一个字符。如果任一个字符都是星号,那么考虑一个匹配项,否则将它们作为相等值进行比较。例如:

bool LicensePlateMatch(std::string const & lhs, std::string const & rhs)
{
    assert(lhs.size() == 6);
    assert(rhs.size() == 6);
    for (int i=0; i<6; ++i)
    {
        if (lhs[i] == '*' || rhs[i] == '*')
            continue;
        if (lhs[i] != rhs[i])
            return false;
    }
    return true;
}

实际上,您不必将其限制为6个字符。您可能需要考虑梳妆台。在这种情况下,只需确保两个字符串具有相同的长度,然后遍历所有字符位置,而不是在其中硬编码6。

这正是我要寻找的,问题解决了。非常感谢。
bool LicensePlateMatch(std::string const & lhs, std::string const & rhs)
{
    assert(lhs.size() == 6);
    assert(rhs.size() == 6);
    for (int i=0; i<6; ++i)
    {
        if (lhs[i] == '*' || rhs[i] == '*')
            continue;
        if (lhs[i] != rhs[i])
            return false;
    }
    return true;
}