我是初学者,制作了一个从lineedit获取输入的函数将其转换为数组,然后搜索它以查找单词。如果找到该单词,则会在标签中打印成功,否则会打印错误。问题是无论我输入什么,每次打印错误都是如此。 我做错了什么。
void MainWindow::on_consoleEdit_returnPressed()
{
QString text = ui->consoleEdit->text();
char enteredCmd[4096];
strcpy(enteredCmd, "Some string data");
text = enteredCmd;
//enteredCmd contains all the data that text string contains
char *open = strstr(enteredCmd, "open");
if(open != NULL) {
ui->answerLabel->setText("SUCCESS");
}
else {
ui->answerLabel->setText("ERROR");
}
}
答案 0 :(得分:1)
您每次都在测试相同的字符串,请参阅:
char enteredCmd[4096];
strcpy(enteredCmd, "Some string data");
text = enteredCmd;
这将使用此“Some string data”字符串的副本覆盖text
值。
无论如何,你让这变得复杂了。 QString
有许多对您有用的功能。
void MainWindow::on_consoleEdit_returnPressed()
{
QString text = ui->consoleEdit->text();
if(text.contains("open")) {
ui->answerLabel->setText("SUCCESS");
} else {
ui->answerLabel->setText("ERROR");
}
}
答案 1 :(得分:0)
您的代码不搜索行编辑中的文字。您的代码实际上是在字符串enteredCmd
上搜索“open”,它始终包含“Some string data”。因此,您应该始终在答案标签上打印“错误”。
以下是我认为你要做的事情,使用QString
代替strstr
:
void MainWindow::on_consoleEdit_returnPressed()
{
QString text = ui->consoleEdit->text();
if(text.contains(QStringLiteral("open"))) {
ui->answerLabel->setText("SUCCESS");
}
else {
ui->answerLabel->setText("ERROR");
}
}
答案 2 :(得分:0)
QString旨在使用多种语言,因此需要进行一些转换才能将文本转换为C样式的8位字符串。您可以尝试这样的事情:
char *myChar = text.toLatin1().data();