C++;仅当用户输入与预设模式匹配时才接受用户输入

  • 本文关键字:用户 模式匹配 C++ c++
  • 更新时间 :
  • 英文 :


G'day大家好。

我对C++很陌生,只是玩一些小规模的东西来掌握基本知识。我想创建一个程序,从cin中获取用户输入,并在它匹配预设模板(例如LLL000,3个字母后面跟着3个数字)时打印出来。想象一下健身房会员制,其中用户ID遵循3个字母和3个数字的格式。

这是我到目前为止想出的代码

//User ID checking
#include <iostream>
#include <string>
using std::string;

int main()
{
string letter;
int number;
std::cout << "Enter your ID: " << std::endl;
std::cin >> letter;
std::cin >> number;
if (letter.size() <= 0 && letter.size() > 3)
{
std::cout << "There must be 3 letters!" << std::endl;
return 1;
}
else if (number < 99 || number >= 1000)
{
std::cout << "The number has to be between 100 and 999";
return 1;
}
else
{
std::cout << "Your ID is " << letter << number;
return 0;
}
}

我的问题是:

  1. 第15-25行似乎没有达到我的预期。事实上,在我看来,当程序运行时,它完全忽略了这一行
  2. 如果第21行像我想象的那样工作,它还会将005这样的用户id标记为无效。我不知道如何用0来填补这个空白
  3. 代码实际上没有任何东西可以与某种格式进行比较,因为我不知道如何做到这一点

如果这是一件我没有看到的非常简单的事情,我很抱歉,并感谢任何帮助!

我还想补充一点,我注意到字符串也会接受数字,而不仅仅是字母作为输入,我不知道这会发生。

对于比较字符串或字符串的部分,您希望使用C++中STL字符串类的compare方法。这允许您将一个std::string与另一个进行比较,或将其与另一个子字符串进行比较。

std::string str1 ("blue fruit");
std::string str2 ("red fruit");
if (str1.compare(6,5,"fruit") == 0)
std::cout << "still, " << str1 << " is a fruitn";

第一个参数是size_t位置,而第二个参数是要比较的字符数。您也可以简单地输入一个参数,另一个字符串,将整个字符串相互比较。

检查数字

例如,如果您有兴趣检查字符是否为0-9数字,请使用STL的C部分中的isdigit方法。

最新更新