Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania
Viewing all articles
Browse latest Browse all 65225

Problem z implementacją algorytmu - generator nicków

$
0
0

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


 


Viewing all articles
Browse latest Browse all 65225

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>