2

我遍历包含单词的 QByteArray。我会将数组内容与给定的单词(QString)进行比较。

for(QByteArray::iterator it = content.begin(); it != content.end(); it++){
    if(content.at(*it) == word){
        ...
    }
}

编译器在线 ( if(content.at ..)) 说:从 'char' 到 'const char*' 的无效转换 [-fpermissive]

在这种情况下如何比较值?

克里斯

4

5 回答 5

1

QByteArray包含字节。QString包含一个字符串,即一个字符序列。单个字节不能与字节序列进行比较。

于 2013-06-25T20:18:22.387 回答
1

我遍历一个包含文件中单词的 qbytearray。我会将每个单词与给定的单词进行比较。

感谢您的澄清。在那种情况下1我会将其转换QByteArrayQString然后将其拆分为单个单词,然后可以进行简单的比较。

// QByteArray is implicitly convertible to QString
QString allWords = yourByteArray;
// split the string at each whitspace or newline
QStringList aWordlist = allWords.split(QRegExp("[\s\r\n]"), QString::SkipEmptyParts)

for (QStringList::iterator it=aWordlist.begin(); it != aWordlist.end(); ++it) 
{ 
   // it points to the next word in the list
   if (*it == word)
   {
       ...
   }
}

1我假设您无法更改将文件内容作为字节数组接收的事实。否则,最好打开 aQFile并从那里读取内容。


在这种情况下,我如何比较这些值?

根据QString 文档QString可以与QByteArray不迭代进行比较。所以你可以简单地说:

QString word("Hello");
QByteArray bytes("hi");

if (word == bytes)
{ 
  ...
}

于 2013-06-25T20:38:40.533 回答
0

*it是一个字节,您尝试将其与一个单词(即一系列字符)进行比较。我不确定您要做什么,但也许您应该content.at(*it)与单词中的第一个字符进行比较?

于 2013-06-25T20:19:09.317 回答
0

我想我知道你想做什么,问题不在于比较,而在于你将文本存储在 aQByteArray而不是 aQString或某种容器(如 aQVector等)中。

您需要研究从QFile类中读取数据的不同方式。在此处查看文档:

文件

QIO设备

于 2013-06-25T21:27:57.347 回答
0

我解决了这个问题:(QString word;

void MainWindow::startSearching()
{
    word = ui->passwordTxt->toPlainText();
    string a;
    fstream inputFile;
    inputFile.open(fileName.data());

    while(!inputFile.eof()){
        inputFile >> a;
        if(a == word.toStdString()){
       //anything
            break;
        }
    }
    inputFile.close();
}
于 2013-06-25T21:41:56.177 回答