我正在使用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")))
,但这也会过滤掉空格。
有人能指出我正确的方向吗?
答案 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)