Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  evol.cpp
Language: C/C++
Code:
#include <iostream>  // cout
#include <ctime>  // time
#include <stdlib.h>  // rand(); srand()
#include <string>  // str

const char randomCharGenerator()
{
    const char repos[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
        ' ', '.', '!','\?','\'', '\"', ':', ',', '`', '_', '-', '$','@','(',')',';','[',']','1','2','3','4','5','6','8','9','0','*','=','+','\\','/',
        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    const int number=sizeof(repos)/sizeof(char);  // calculates the number of elements in repos  
      
    static int randResult=0;
    srand(std::time(nullptr)+randResult); // initialize random seed 
    randResult=rand();
    
    int index=randResult % (number); // generates a number between zero and number    
    const char c=repos[index];  // repos is a zero-based array
    return c;
}

std::string randomString(int Lenght)
{
    std::string str;
    str.clear();
    char c;
    do{
    c=randomCharGenerator();
    str.push_back(c);   
    } while (str.length() <=Lenght-1);
    return str;
}

bool evolveString(const std::string& model, std::string& str)
{
    bool continu=false;
    
    for (unsigned i=0; i<=model.length()-1; ++i)
        if (model.at(i) != str.at(i))
        {
            const char c=randomCharGenerator();
            str.replace(i,1,1,c);
            continu=true;                   
        }
        else
        {
            if (!continu) continu=false;
        }
    
    return continu;
}
    
int main()
{
    std::string goalStr; 
    std::cout << "Enter a short sentence (should be < 25 characters)\n";
    std::getline(std::cin, goalStr);
    std::string currentStr=randomString(goalStr.length());
    unsigned count=0;
        
    while (evolveString(goalStr, currentStr))
        std::cout << "Generation " << ++count << ": " << currentStr << '\n';
    
    std::cout << "original sentence: " << goalStr << '\n';
    
    return 0;
}
Comments: