【问题标题】:Verification: Is entered - integer number? QT c++验证:是否输入-整数? QT C++
【发布时间】:2013-11-17 06:22:30
【问题描述】:

请帮我优化检查输入值的功能。函数返回 true 并使用链接发送值,如果输入 - 整数,或者如果输入 char、string(empty),则返回 false。我认为有2种方法可以加快速度:消除使用std::string或消除使用QString。

bool tryRead(int &v)
{
    QString s;
    string s1;
    cin >> s1;
    s = QString::fromStdString(s1);
    if (s.isEmpty())
    {
        cout << "Error! You entered empty string";
        return false;
    }
    bool isNumber = true;
    v = ((s.toInt(&isNumber)));
    if(isNumber == false)
        return false;
    return true;
}

【问题讨论】:

  • 也许不相关,但在什么情况下您需要优化它?如果您实际接受用户输入,这绝不会成为应用程序的瓶颈。
  • 提高速度。减少对变量的调用次数。现在我打了 2 次: s=QString::fromStdString(s1); v=((s.toInt(&isNumber)));我认为如果读取 QString 或检查字符串会更快。
  • 您希望用户输入多快才能有所作为?
  • 将最后 3 行替换为 return isNumber; 将有助于我晚上睡觉。同样使用QIntValidator 是首选的“Qt”方式(qt-project.org/doc/qt-5.1/qtgui/qintvalidator.html)。
  • 你可以按照here的描述直接从cin读取到QString。

标签: c++ algorithm qt verification


【解决方案1】:

这就是 iostream 运算符的用途。一个最小的实现是:

bool tryRead(int &v){
    cin >> v;
    return cin.good();
}

根据您实际想要完成的任务,您可能需要添加一些额外的健全性检查、错误处理和 cin 清理。

【讨论】:

    【解决方案2】:

    您可以使用QTextStream,而不是使用cincout

    QTextStream cin(stdin), cout(stdout);
    int myint;
    cin >> myint;
    if(cin.status() != QTextStream::Ok)
        cout << "It is not an integer!" << endl;
    

    检测到错误后,请务必调用QTextStream::resetStatus() 清除错误标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-25
      • 2012-11-02
      • 2013-02-20
      • 1970-01-01
      • 2019-06-02
      • 2011-07-20
      • 2017-01-05
      • 2013-05-31
      相关资源
      最近更新 更多