Cześć, pisałem ostatnio własny projekt - mianowicie generator nicków w C++. Wszystko się kompiluje, tylko czasami nicki są za krótkie. Próbowałem robić kilka zabezpieczeń, ale to nic nie zmieniło. Mój algorytm opiera się na losowaniu długości nicku, później spółgłosek i samogłosek, a następnie zamianę ich na litery.
#include <iostream> #include <ctime> #include <cstdlib> #include "nick.h" using namespace std; int main() { srand(time(NULL)); int minLength, maxLength, amountOfNicknames; nick nick; nick.loadConsonants(); do { cout << "Minimal nickname`s length: "; cin >> minLength; if(minLength<=0) cout << "Minimal length have to be greater than zero"<< endl; } while(minLength<=0); do { cout << "Maximal nickname`s length: "; cin >> maxLength; if(maxLength<minLength) cout << "Maximal length have to be greater"<< endl; } while(maxLength<minLength); cout << "Amount of nicknames: "; cin >> amountOfNicknames; for(int i=0; i<amountOfNicknames; i++) { nick.randomAmount(minLength,maxLength); cout << nick.randomize() << endl; } return 0; }
#include <string> class nick { public: int vowelsNumber, consonantsNumber, randomLength; //samogloska, spólgloska std::string consonants[18], vowels[6], nickname; int randomAmount(int min, int max); void loadConsonants(); std::string randomize(); };
#include "nick.h" #include <iostream> #include <cstdlib> #include <ctime> #include <fstream> #include <cctype> using namespace std; int nick::randomAmount(int min, int max) { randomLength =( rand() % (max-min) ) + min; vowelsNumber =( rand() % (randomLength*3/4 - randomLength*1/4) ) + randomLength*1/4 +1; consonantsNumber = randomLength - vowelsNumber; return vowelsNumber, consonantsNumber, randomLength; } void nick::loadConsonants() { fstream consonantsList, vowelsList; string line; int lineNumber=0; consonantsList.open("consonants.txt", ios::in); if(consonantsList.good()==false) cout << "Couldn`t load consonants.txt"<< endl; while (getline(consonantsList, line) && !consonantsList.eof()) { consonants[lineNumber]=line; lineNumber++; } consonantsList.close(); lineNumber=0; vowelsList.open("vowels.txt", ios::in); if(vowelsList.good()==false) cout << "Couldn`t load vowels.txt"<< endl; while (getline(vowelsList, line) && !vowelsList.eof()) { vowels[lineNumber]=line; lineNumber++; } vowelsList.close(); } string nick::randomize() { int vowelCounter=0, consonantCounter=0; nickname=""; for(int i=0; i < randomLength; i++) { if(rand()%2==0 && consonantsNumber>0 && (consonantCounter<2 || vowelsNumber==0)) { nickname+=consonants[rand()%18]; consonantsNumber--; consonantCounter++; vowelCounter=0; } else if(vowelsNumber>0 && (vowelCounter<2 || consonantsNumber==0)) { nickname+=vowels[rand()%6]; vowelsNumber--; vowelCounter++; consonantCounter=0; } nickname[0]=toupper(nickname[0]); } return nickname; }