正在研究这个程序,该程序需要使用一个函数来比较用户输入的字符串,并让用户有机会将他/她不知道的字符留在输入中,用*替换它们。输入表示具有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。
答案 0 :(得分: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。