我遍历包含单词的QByteArray。我将比较数组内容与给定的单词(QString)。
for(QByteArray::iterator it = content.begin(); it != content.end(); it++){
if(content.at(*it) == word){
...
}
}
编译器在线说(if(content.at ..)
):从'char'无效转换为'const char *'[-fpermissive]
我如何比较这种情况下的值?
克里斯
答案 0 :(得分:1)
QByteArray
包含字节。 QString
包含一个字符串,即一系列字符。单个字节无法与字节序列进行比较。
答案 1 :(得分:1)
我遍历一个包含文件中单词的qbytearray。我会用给定的单词比较每个单词。
感谢您的澄清。在那种情况下, 1 我会将QByteArray
转换为QString
,然后将其拆分为单个单词,然后可以进行简单的比较。
// 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 我假设您无法更改接收文件内容为字节数组的事实。否则,打开QFile
并从那里读取内容可能会更好。
<击> 撞击>
<击>我如何比较这种情况下的值?
根据QString documentation,QString
可以与QByteArray
进行比较而无需迭代。所以你可以简单地说:
QString word("Hello");
QByteArray bytes("hi");
if (word == bytes)
{
...
}
击> <击> 撞击>
答案 2 :(得分:0)
*it
是一个字节,你试图将它与一个字(即一系列字符)进行比较。我不确定你要做什么,但也许你应该将content.at(*it)
与单词中的第一个字符进行比较?
答案 3 :(得分:0)
我想我知道你想要做什么,问题不在于你将文字存储在QByteArray
而不是QString
或某些事实中的比较一种容器,例如QVector
等
您需要研究从QFile
类读取数据的不同方式。在这里查看文档:
答案 4 :(得分: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();
}