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文字のシーケンスである文字列を含みます。1 バイトを一連のバイトと比較することはできません。

于 2013-06-25T20:18:22.387 に答える
1

ファイルからの単語を含む qbytearray を反復処理します。各単語を特定の単語と比較します。

明確にしていただきありがとうございます。その場合1を to に変換して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それ以外の場合は、a を開いて、そこから内容を読み取る方がよいでしょう。


この場合、どのように値を比較できますか?

QString documentationによると、反復せずQStringに比較できます。QByteArrayしたがって、次のように簡単に言えます。

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

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

于 2013-06-25T20:38:40.533 に答える
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 に答える
0

私はあなたが何をしたいのか知っていると思います。問題は比較ではなく、テキストをQByteArrayではなくQString、または などの何らかのコンテナに保存したという事実ですQVector

QFileクラスからデータを読み取るさまざまな方法を検討する必要があります。ここのドキュメントをチェックしてください:

Qファイル

QIOデバイス

于 2013-06-25T21:27:57.347 に答える