Zadanie z C++.
Tresc: Program tworzy losowo stringa i sprawdza czy z tych literek można stworzyć słowo w słowniku.
Kod:
Kod:
#include <iostream>
#include <fstream>
#include <time.h>
#include <string>
using namespace std;
int main()
{
string napis_los;
int x;
bool ok;
string napis;
int t_napis[24];
int t_napis_los[24];
srand(time(0));
/*
Czyszczenie tablic w ktorych przechowuje
ilosc kazdej literki
*/
for(int i=0;i<24;i++){
t_napis[i] = 0;
t_napis_los[i] = 0;
}
/*
Czyszczenie tablic w ktorych przechowuje
ilosc kazdej literki
*/
/* Generowanie stringa */
for(int i=0;i<6;i++){
x = rand() % 25 + 97;
napis_los += (char)x;
}
/* Generowanie stringa */
/* Zliczanie znakow ze strina wylosowanego */
for(int j=0;j<napis_los.length();j++){
switch(napis_los[j]){
case 'a':
t_napis_los[0] += 1;
break;
case 'b':
t_napis_los[1] += 1;
break;
case 'c':
t_napis_los[2] += 1;
break;
case 'd':
t_napis_los[3] += 1;
break;
case 'e':
t_napis_los[4] += 1;
break;
case 'f':
t_napis_los[5] += 1;
break;
case 'g':
t_napis_los[6] += 1;
break;
case 'h':
t_napis_los[7] += 1;
break;
case 'i':
t_napis_los[8] += 1;
break;
case 'j':
t_napis_los[9] += 1;
break;
case 'k':
t_napis_los[10] += 1;
break;
case 'l':
t_napis_los[11] += 1;
break;
case 'm':
t_napis_los[12] += 1;
break;
case 'n':
t_napis_los[13] += 1;
break;
case 'o':
t_napis_los[14] += 1;
break;
case 'p':
t_napis_los[15] += 1;
break;
case 'r':
t_napis_los[16] += 1;
break;
case 's':
t_napis_los[17] += 1;
break;
case 't':
t_napis_los[18] += 1;
break;
case 'u':
t_napis_los[19] += 1;
break;
case 'w':
t_napis_los[20] += 1;
break;
case 'x':
t_napis_los[21] += 1;
break;
case 'y':
t_napis_los[22] += 1;
break;
case 'z':
t_napis_los[23] += 1;
break;
}
}
/* Zliczanie znakow ze strina wylosowanego */
cout << "Napis wylosowany: " << napis_los << "\nRozmiar: " << napis_los.length() << endl;
cout << "Wystepowanie: ";
for(int i=0;i<24;i++) cout << t_napis_los[i] << " ";
cout << endl;
cout << "*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*" << endl;
/*
Skojarzenie pliku slownika otwarcie i dla kazdego
wyrazu robi sie zliczanie wystepowania znakow i
potem nastepuje porownanie i jesli mozna zlozyc to wyswietlaj
chyba coś tutaj jest ****ane :(
*/
fstream plik("slownik.txt", fstream::out | fstream::in);
while(!plik.eof()){
getline(plik, napis);
if(napis.length() <= napis_los.length()){
for(int j=0;j<napis.length();j++){ // Wiem, ze lepiej uzyc while ale tak mi kur.. wygodniej
switch(napis[j]){
case 'a':
t_napis[0] += 1;
break;
case 'b':
t_napis[1] += 1;
break;
case 'c':
t_napis[2] += 1;
break;
case 'd':
t_napis[3] += 1;
break;
case 'e':
t_napis[4] += 1;
break;
case 'f':
t_napis[5] += 1;
break;
case 'g':
t_napis[6] += 1;
break;
case 'h':
t_napis[7] += 1;
break;
case 'i':
t_napis[8] += 1;
break;
case 'j':
t_napis[9] += 1;
break;
case 'k':
t_napis[10] += 1;
break;
case 'l':
t_napis[11] += 1;
break;
case 'm':
t_napis[12] += 1;
break;
case 'n':
t_napis[13] += 1;
break;
case 'o':
t_napis[14] += 1;
break;
case 'p':
t_napis[15] += 1;
break;
case 'r':
t_napis[16] += 1;
break;
case 's':
t_napis[17] += 1;
break;
case 't':
t_napis[18] += 1;
break;
case 'u':
t_napis[19] += 1;
break;
case 'w':
t_napis[20] += 1;
break;
case 'x':
t_napis[21] += 1;
break;
case 'y':
t_napis[22] += 1;
break;
case 'z':
t_napis[23] += 1;
break;
}
}
ok = false;
/*
Tutaj powinno sprawdzac czy dany napis ze slownika
zawiera w sobie wylosowany napis
*/
for(int y=0;y<24;y++){
if(t_napis_los[y] <= t_napis[y]) ok = true;
else{
ok = false;
break;
}
}
/*
Tutaj powinno sprawdzac czy dany napis ze slownika
zawiera w sobie wylosowany napis
*/
if(ok == true) cout << napis << endl;
for(int i=0;i<24;i++) t_napis[i] = 0;
}
}
/*
Skojarzenie pliku slownika otwarcie i dla kazdego
wyrazu robi sie zliczanie wystepowania znakow i
potem nastepuje porownanie i jesli mozna zlozyc to wyswietlaj
chyba coś tutaj jest ****ane :(
*/
cin.get();
return 0;
}
W załączniku jest słownik wyrazów.
Coś nie za bardzo on mi działa jednak nie potrafię się dopatrzeć luki. Najprawdopodobniej coś w warunkach jest ******e :/
Wiem, wiem wiem dzisiaj sobota...