C++ use ENTER to quit program – излизане от конзолна програма с Enter

C++ е много печен език и почти винаги едно нещо може да се напише по 10 различни начина. Но всеки от начините си има предимства и недостатъци. Скрипта по-долу е една моя алтернатива на проверка за натиснат 2 пъти ENTERR в конзолна програма. Използва Enter-а за изход, като просто проверявам, дали има въведен string в командния вход – cin:

#include <iostream>
using namespace std;
 
int main () {
string a;
 
while(1){
    getline(cin, a);
    if (a.empty())
        break;
    cout<<"You added: "<<a<<endl;
}
 
cout<<"You Enter!"<<endl;
}

След компилиране се получава това:
C++ use Enter to quit program

Share and Enjoy !

Shares

PoetryHaxor – програма за търсене на рими

Написах простичка програма за търсене на рими. Демек програма за поезия. Мислех си да го напасна по срички (имаше една тема в DBG като идея), но стигнах до извода, че няма прекалено много думи, които да съвпадат по срички, за да хвърля ресурси в тая насока.
Писах го на C++, пак с опреснителна цел, както и други проекти напоследък. Макар, че като погледна кода леко ме хваща сТрам :). Прилагам проекта със сорса и ако някой има желание, може да си го прекомпилира и оптимизира (минимум :)). Речника е отделен от exe-то и е обикновен текстов файл с много думи. Начоплил съм го от BGOffice Помощник.
Ето линк към програмката, “мечта” на всички поети :): PoetryHaxor_1.0
PoetryHaxor - програма за търсене на рими
Речника е доста сериозен, а програмката не е особено оптимизирана. В тоя смисъл, за да работи по-бързичко се иска по-съвременна машина, но мисля, че и на 1GHz с 1Gb ще върви що-годе с забавяне при търсенето 3-4 секунди.

Пренаписах програмата (на perl) за linux – PoetryHaxor for Linux.
PS: Благодарение на bvbfan от форума на linux-bg.org пренаписах програмата, като кеширах речника в паметта. Към момента не отчитам подобряване на бързодействието, но ще си мисля още по въпроса. Ето и версия 0.2 на програмата: PoetryHaxor-v.02

Написах нова версия на програмата – PoetryHaxor 3.0. Тази версия е писана на C# и изисква .Net фреймуърк. Речника е обогатен с двойно повече думи и търсенето на думи става за по-малко от секунда. Изстегляне: PoetryHaxor-v.03.

Share and Enjoy !

Shares

C++ RegEx wxDev-C++ – прост регулярен израз

Тия дни пиша една програмка за един приятел. Но реших вместо на php да я напиша на C++, че и без това го мъча напоследък. За компилатор и среда използвам wxDev-C++, че ми идва в всичко на куп, вкючително и за GUI.
Но нещо не можах да подкарам нормално Regular Expression. wxDevCpp разполага с интегрирани библиотеки, но какъвто и код да напиша не баца, да го weba! Случайно в мрежата открих и друг пич с подобен проблем и от него разбрах, че ако добавя по-долните редове в Линкера всичко ще е мед и рози:
-static
-l$(WXLIBNAME)
-l$(WXLIBNAME)_gl
-lwxtiff
-lwxjpeg
-lwxpng
-lwxzlib
-lwxregex
-lwxexpat
-lkernel32
-luser32
-lgdi32
-lcomdlg32
-lwinspool
-lwinmm
-lshell32
-lcomctl32
-lole32
-loleaut32
-luuid
-lrpcrt4
-ladvapi32
-lwsock32
-lodbc32
-lopengl32

За да се добавят, трябва да се създаде нов проект, след което се избира: Project -> Project Options -> Additional Command-Line Options -> пейства се в полето Linker.
Прост код за пример:

#include <iostream>
#include <wx/wx.h>
#include <wx/regex.h>
using namespace std;
 
int main()
{
wxRegEx reg("[0-9]{3}$");
wxString str = "sddgtrf156";
if(reg.Matches(str)) cout << "matches\n"; // match the string - yes!!
}

Share and Enjoy !

Shares

C++ – read text file and add line to vector

Реших да си припомня малко C++, защото в някои случаи е просто незаменимо като скорост на изпълнение. Което е обратно пропорционално на скоростта на писане (в моя случай). Но пък винаги е добре да владееш до известна степен някой друг език, дава ти различен ъгъл за виждане.
Днешната цел е да прочета текстов файл и да вкарам всеки ред от файла в масив. В случая няма да ползвам масив, а вектор, защото ми е по-лесно да работя с вектори:

/* 
    Open the text file in code. C++ has iostream and fstream headers to assist with this.
    Until you reach EOF, read one line at a time.
    // For each line in step 2, split the line on a space (google string tokenizer)
    // For each token from step 3, add to a vector
    For each line in step 2, add to a vector
    Close the file
*/
#include <iostream>
#include <fstream>
//#include <string>
#include <vector>
 
using namespace std;
 
 
int main () {
string line;
vector<string> myvector;
ifstream myfile ("example.txt");
 
 
if (myfile.is_open()){
  while ( myfile.good()){
    getline (myfile,line);
    // cout << line << endl;
    myvector.push_back (line);
  }
  myfile.close();
} else cout << "Unable to open file"; 
 
 
for(int i = 0; i < myvector.size(); i++ ){
    cout << myvector[i] << "\n";
}
 
return 0;
}

В началото на скрипта има едни коментари, които ги свих от някакъв сайт. По тези коментари може лесно да се направи програмата да разделя текста и на отделни думи.

Share and Enjoy !

Shares