Автор Тема: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст  (Прочетена 2246 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Код: C++ (QT)
  1. #include <QtCore/QCoreApplication>
  2. #include <QString>
  3. #include <QByteArray>
  4. #include <QDebug>
  5. #include <QList>
  6. int main(int argc, char *argv[])
  7. {
  8.     QCoreApplication a(argc, argv);
  9.  
  10.  
  11.         QByteArray bstr = "Tuk vyvejdate teksta, na koito iskate da izvedete povtoreniqta.";
  12.         int max = bstr.size();
  13.         QList<char> ch;
  14.         QList<char> chr;
  15.         QList<int> ar;
  16.         char c;
  17. //Sortirane simvolite
  18.         for(int n = 0; n < 128; n++)
  19.         {        
  20.          c = n;
  21.          for(int i = 0; i < max; i++)
  22.          {
  23.              if(c == bstr.at(i))
  24.              {
  25.              ch.append(bstr.at(i));
  26.              }
  27.  
  28.          }
  29.         }
  30. // Otdelqne na bukvi sydyrjashti se v stringa
  31.         char br;
  32.         for(int r = 0; r < ch.size(); r++)
  33.         {
  34.             if(chr.isEmpty())
  35.             {
  36.             br = ch.at(r);
  37.             chr.append(ch.at(r));
  38.             }
  39.            if(br != ch.at(r))
  40.            {
  41.                br = ch.at(r);
  42.                chr.append(ch.at(r));
  43.            }
  44.         }
  45. //Izbroqvane na povtoreniqta
  46.         for(int t = 0; t < chr.size(); t++)
  47.         {
  48.         ar.append(bstr.count(chr.at(t)));
  49.         }
  50. // Vizualizaciq
  51.         for(int g = 0; g < chr.size(); g++)
  52.         {
  53.         qDebug() << chr.at(g) << " - " << ar.at(g) ;
  54.         }
  55.  
  56.     return a.exec();
  57. }
« Последна редакция: 12 Май 2015, 22:01:12 от Avalanche »

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #1 -: 02 Септември 2011, 11:43:32 »
Браво, бе, герой! Ще въртиш 128 пъти по string-а? Добре, че не е unicode, че тогава колко щеше да е забавно.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #2 -: 02 Септември 2011, 11:50:15 »
Ако се сещаш за друго решение мерси аз поне не се сетих или съм пропуснал нещо. :-\

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #3 -: 02 Септември 2011, 11:55:29 »
Dicrionary/Map/HashTable знаеш ли какво е?

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #4 -: 02 Септември 2011, 12:19:55 »
Не ми се е налагало да го ползвам би ли разяснил как да се ползва в Qt;

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #5 -: 02 Септември 2011, 13:45:39 »
http://doc.qt.nokia.com/stable/qhash.html

Не че това е единственият начин (дори не съм сигурен, че е най-добрият), ама кодът ще стане едно 128 пъти по-бърз.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #6 -: 02 Септември 2011, 14:18:05 »
Ето решението, което измъдрих. :)

Код: C++ (QT)
  1. #include <QtCore/QCoreApplication>
  2. #include <QByteArray>
  3. #include <QDebug>
  4. #include <QList>
  5. #include <QChar>
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.     QCoreApplication a(argc, argv);
  10.  
  11.  
  12.         QByteArray bstr = "Tuk vyvejdate teksta, na koito iskate da izvedete povtoreniqta.";
  13.         QHash<char, int> hs;
  14.         QList<char> ch;
  15.         QList<int> ar;
  16.        
  17.  
  18.         for(int i = 0; i < bstr.size(); i++)
  19.         {
  20.             hs.insert(bstr.at(i),i);
  21.         }
  22.         foreach(int n, hs)
  23.         {
  24.         ch.append(hs.key(n));
  25.         }
  26. // Izbroqvane na povtoreniqta
  27.         for(int t = 0; t < ch.size(); t++)
  28.         {
  29.         ar.append(bstr.count(ch.at(t)));
  30.         }
  31. // Vizualizaciq
  32.         for(int g = 0; g < ch.size(); g++)
  33.         {
  34.         qDebug() << ch.at(g) << " - " << ar.at(g) ;
  35.         }
  36.  
  37.     return a.exec();
  38. }
  39.  
« Последна редакция: 12 Май 2015, 22:01:27 от Avalanche »

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Qt 4.7.4 C++ Извеждане на повтарящи се символи от текст
« Отговор #7 -: 02 Септември 2011, 15:04:24 »
За кво я пазиш тая позиция. Пази колко пъти се повтаря символа! И освен това си си забравил кода дето проверяваше дали символът е буква. Не че кодът така или иначе не е безполезен, но ако приемем, че искаме да се запази поведението от първия вариант тряабва да се върна. Тая променлива max вече не ти трябва.