Название: Подсчет вхождения слова в текст Отправлено: gertvaQT от Январь 22, 2014, 19:58 Здравствуйте. В QT новичек. Написал следующую программу для подсчета вхождения слова в текст
QMap<QString, int>* calculation::calculate(QString allText) { QMap<QString, int> *map = new QMap<QString, int>(); QStringList list = allText.split(QRegExp("\\W+"), QString::SkipEmptyParts); for (int i=0; i<list.size();i++) { int numm = allText.count(list,Qt::CaseInsensitive); map->insert(list, numm); } return map; } Беда в том, что она считает и вхождения подстрок в слова. Например если в тексте встретилось слово "за", то оно потом посчитает и "глаЗА", "тормоЗА" и прочие. Что можно сделать, чтоб оно считало только слова целиком? За ранее благодарен. Название: Re: Подсчет вхождения слова в текст Отправлено: Serr500 от Январь 22, 2014, 20:15 Вы ещё скажите, что эта херня компилируется...
Название: Re: Подсчет вхождения слова в текст Отправлено: gil9red от Январь 22, 2014, 20:29 Вот накидал:
Код
ЗЫ. ваш код действительно некомпилируемый :) Если все-таки будете выделять память под карту, тогда строку map[ word ]++ замените на map->insert( word, map->value( word ) + 1 ) ;) Название: Re: Подсчет вхождения слова в текст Отправлено: Alex Custov от Январь 22, 2014, 20:53 Если все-таки будете выделять память под карту, тогда строку map[ word ]++ замените на map->insert( word, map->value( word ) + 1 ) ;) Зачем? Название: Re: Подсчет вхождения слова в текст Отправлено: Igors от Январь 22, 2014, 21:26 QStringList list = allText.split(QRegExp("\\W+"), QString::SkipEmptyParts); Во как хорошо - написал строку, и все сделано. А какой ценой - ну зачем об этом думать?Название: Re: Подсчет вхождения слова в текст Отправлено: kambala от Январь 22, 2014, 21:34 можно регуляркой \b<слово>\b
Название: Re: Подсчет вхождения слова в текст Отправлено: gertvaQT от Январь 22, 2014, 21:41 gil9red, Огромное спасибо, все заработало
Название: Re: Подсчет вхождения слова в текст Отправлено: gil9red от Январь 22, 2014, 22:48 gil9red, Огромное спасибо, все заработало Да на здоровье ;DЕсли все-таки будете выделять память под карту, тогда строку map[ word ]++ замените на map->insert( word, map->value( word ) + 1 ) ;) Зачем? При создании карты в кучи, первый вариант (с map[ word ]++), не хотел компилироваться :) |