1

一直在研究这个程序,该程序需要使用一个函数来比较用户输入的字符串,并让用户有机会将他/她不知道的字符留在输入之外,用 * 替换它们。输入表示具有 6 个字符(例如 ABC123)的汽车牌照,并且允许用户省略这些字符中的任何一个(例如 AB** 23 或 ** C12* 等)。因此,该函数需要返回与正确位置的字符匹配的所有对象,但如果 A 在正确的位置但任何其他字符都不在,则它不能返回。但是,例如,只允许用户输入 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();

}

     int main()
    {
            string newLicensePlateIn;
            newLicensePlateIn = removeAsterisk(licensePlateIn);
            string buf; // Have a buffer string
            stringstream ss(newLicensePlateIn); // Insert the string into a stream

            vector<string> tokens; // Create vector to hold our words

            while (ss >> buf)
                tokens.push_back(buf);
            myRegister.showAllLicense(tokens); 
    }

接收向量的类函数目前看起来像这样:

    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。

4

1 回答 1

0

只需遍历字符,一次比较一个。如果任一字符是星号,则认为匹配,否则比较它们是否相等。例如:

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。

于 2012-12-02T17:53:04.730 回答