过滤字符串以保持a-z和空格标记c ++?

时间:2017-04-29 13:51:43

标签: c++ string qt

我正在使用QT设计字典来对用户输入的单词/字符串进行排序。

在“静音模式”中,我希望用户只输入一个单词(a-z)或一串单词(a-z,用空格分隔)。

我真的很难在保留空格的同时过滤掉非字母!

if(ui->silentButton->isChecked())
{
    if(userWord == " ") // if user enters just a space
    {
        QMessageBox messageBox;
        messageBox.critical(0,"Error!","Please enter a valid word to continue...");
        messageBox.setFixedSize(500,200);
    }
    else if(userWord == "") // if user enters nothing
    {
        QMessageBox messageBox;
        messageBox.critical(0,"Error!","Please enter a valid word to continue...");
        messageBox.setFixedSize(500,200);
    }

    else if (userWord.contains(" ")) // if user enters a string that contains a space
    {
        QStringList Splitstring = userWord.split(QRegExp("\\W"), QString::SkipEmptyParts);

        for(int i = 0; i < Splitstring.size(); ++i)
        {
            MyTree->insert(MyTree->getRoot(), Splitstring.at(i).toLocal8Bit().constData());
        }
    }

    else
    {
        MyTree->insert(MyTree->getRoot(),userWord);

    }

不幸的是,这不起作用,因为它仍然允许用户输入非字母或包含非字母的字符串,即} a} a b c}

我希望它在输入任何非字母的东西时都会出现错误。我尝试过使用if(userWord.contains(QRegExp("\\w"))),但这也会过滤掉空格。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

if(ui->silentButton->isChecked())
{
    if(userWord.trimmed() == "") // if user enters just a space or nothing
    {
        QMessageBox messageBox;
        messageBox.critical(0,"Error!","Please enter a valid word to continue...");
        messageBox.setFixedSize(500,200);
    }
    else if (userWord.contains(" ")) // if user enters a string that contains a space
    {
        QStringList splitString { userWord.split(QRegularExpression("[^a-z]"), QString::SkipEmptyParts) };

        for(int i = 0; i < splitString.size(); ++i)
        {
            MyTree->insert(MyTree->getRoot(), splitString.at(i).toLocal8Bit().constData());
        }
    }
    else
    {
        MyTree->insert(MyTree->getRoot(),userWord);
    }
}

这应该适合你。

我已经做了一些改进,例如添加trimmed(),因为这会使它既适用于输入错误,也可以指定多个空格,并调整正则表达式以排除您不喜欢的内容。需要。

我已替换QRegExp,因为QRegularExpression应该使用,因为它更快(新)。

变量应以小写字母开头,因此splitString重命名。

现在输入结果: "test } awa} fa baad cdda c}"

是: test awa fa baad cdda c

答案 1 :(得分:0)

正如@ deW1所指出的那样,你应该使用QRegularExpression来解决性能问题,并尝试将其用于正则表达式

/^([a-zA-Z]+( )?[a-zA-Z]+)*$/

这将允许空格分隔值。