比较c ++中的两个不同的值

时间:2013-06-25 20:15:32

标签: c++ qt

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

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

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

我如何比较这种情况下的值?

克里斯

5 个答案:

答案 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 documentationQString可以与QByteArray进行比较而无需迭代。所以你可以简单地说:

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

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

<击>

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我想我知道你想要做什么,问题不在于你将文字存储在QByteArray而不是QString或某些事实中的比较一种容器,例如QVector

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

QFile

QIODevice

答案 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();
}