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

标签 c++

大家好。

我是 C++ 的新手,只是想尝试一些小规模的东西来掌握基础知识。我想创建一个程序,它将从 cin 获取用户输入,并在且仅当它与预设模板匹配时打印出来,例如 LLL000(因此,3 个字母后跟 3 个数字)。想想像健身房成员(member)这样的事情,其中​​用户 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. 代码实际上没有任何东西可以尝试与某种格式进行比较,因为我不知道该怎么做。

如果我只是没有看到这是非常简单的事情,我深表歉意,并感谢任何帮助!

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

最佳答案

要比较字符串或字符串的一部分,您需要使用 compare C++中STL字符串类的方法。这允许您将一个 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 fruit\n";

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

检查数字

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

关于C++;仅在匹配预设模式时接受用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635749/

相关文章:

c++ - 如何在 LLVM 传递中获取 C++ 析构函数?

c# - 将 C# 哈希函数转换为 C++

c++ - gprof 的时间采样问题

c++ - 用于概念检查的显式实例化

c++ - 无法连接到套接字

c++ - 每个编译单元是否只有一个未命名的命名空间?

c++ - "Cleaning up"嵌套 if 语句

c++ - 在C++中使用CUDA进行Opencv加速

c++ - 在 QList 中获取所有 QLabels 表单 UI 的正确方法是什么?

c++ - FFTW _GNUC_ 未定义为预处理器宏