2013-06-25 5 views
2

Я перебираю QByteArray, который содержит слова. Я сравню содержимое массива с данным словом (QString).Сравните два разных значения в C++

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

компилятор говорят на линии (if(content.at ..)): Invalid преобразование из 'полукокса' до 'сопзЬ символ *' [-fpermissive]

как я могу сравнить значения в этом случае?

Chris

+1

Вы в основном извлечь байт ('char' в данном случае) из массива , Затем вы просите Qt сравнить один символ с вашим словом. Это не имеет смысла. – Marius

+1

'Я перебираю QByteArray, содержащий слова'. Это предложение не имеет для меня никакого смысла. Вы имеете в виду, что оно содержит одно слово или несколько конкатенированных слов? – djf

+0

thats right, я имею в виду: я перебираю qbytearray, который содержит слова из файла. Я буду сравнивать каждое слово с данным словом. – user1895683

ответ

1

Я перебираю qbytearray, который содержит слова из файла. Я буду сравнивать каждое слово с данным словом.

Спасибо за разъяснение. В этом случае Я бы преобразовал 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) 
    { 
     ... 
    } 
} 

Я предполагаю, что вы не можете изменить тот факт, что вы получите содержимое файла в виде массива байтов. В противном случае было бы лучше открыть QFile и прочитать содержимое оттуда.


Как я могу сравнить значения в этом случае?

Согласно QString documentation, QString можно сравнить с QByteArray без перебора. Таким образом, вы могли бы просто сказать:

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

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

1

QByteArray содержит байты. QString содержит строку, то есть последовательность символов. Один байт нельзя сравнивать с последовательностью байтов.

+1

Хотя это точно, это говорит о компиляторе в вопросе. –

0

*it является байтом, и вы пытаетесь сравнить его со словом (т. Е. Последовательность символов). Я не уверен, что вы пытаетесь сделать, но, может быть, вам стоит сравнить content.at(*it) с первым символом в слове?

0

Я думаю, я знаю, что вы хотите сделать, и проблема заключается не столько в сравнении, как с тем, что вы сохранили текст в QByteArray а не QString или какой-либо контейнер, такой как QVector и т. д.

Вам необходимо изучить различные способы чтения данных из класса QFile.Проверьте документы здесь:

QFile

QIODevice

+0

Эй, спасибо вам: D – user1895683

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