• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program dodaje nowy napis do starego

0 głosów
56 wizyt
pytanie zadane 15 stycznia 2018 w C i C++ przez Mick_SQ6IYV Użytkownik (750 p.)

Witam!

Zadaniem programu jest "odgadnąć" hasło wprowadzone przez użytkownika. Użytkownik wprowadza napis składający się z określonej liczby liter, a komputer losuje zadaną ilość znaków i sprawdza, czy udało mu się wylosować to, co wpisał użytkownik. Wszystko fajnie, tylko program do wylosowanego (w poprzedniej próbie) napisu "dokleja" mi nowo utworzoną kombinację liter. Najchętniej kazałbym programowi za każdym razem kasować stary napis po sprawdzeniu jego poprawności.

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <time.h>

using namespace std;

string generator();

int liczba_podejsc=0, liczba_znakow=3;
string napis, haslo;

int main(int argc, char** argv) 
{
	srand(time(NULL));
	cout << endl << " Podaj mi jakies slowo (skladajace sie z 3 znakow): ";
	cin >> haslo;
	do
	{
		system("cls");
		generator();
		liczba_podejsc++;
		cout << endl << " " << liczba_podejsc << ". Podano: " << haslo << ". Wylosowano: " << napis << endl;
		Sleep(50);	
	}
	while(haslo!=napis);
	cout << " Odgadlem Twoje haslo w " << liczba_podejsc << " probie! :)" << endl;
	system("pause");
	return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
string generator()
{
	int liczba;
	char znaki[26]={'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'};
	for(int i=1; i<=liczba_znakow; i++)
	{
		liczba=(rand()%26)+1;
		napis+=znaki[liczba];
		i++;
	}
	return napis;
}

 

1
komentarz 15 stycznia 2018 przez draghan VIP (102,530 p.)

Najchętniej kazałbym programowi za każdym razem kasować stary napis po sprawdzeniu jego poprawności.

A więc tak zrób. ;)

1 odpowiedź

+2 głosów
odpowiedź 15 stycznia 2018 przez niezalogowany
wybrane 15 stycznia 2018 przez Mick_SQ6IYV
 
Najlepsza

Po co kasować stary napis jak można modyfikować jego elementy? ;)

#include <iostream>
#include <cstdlib>
#include <string>
#include <windows.h>
#include <time.h>
using namespace std;

void generator(string& napis);

int main(int argc, char** argv)
{
	srand(time(NULL));
	int liczba_podejsc = 0, liczba_znakow = 3;
	string napis, haslo;
	
	cout << endl << " Podaj mi jakies slowo: ";
	cin >> haslo;

	if (haslo.length() != liczba_znakow)
	{
		cerr << "\nBlad krytyczny! Podano slowo o nieodpowiedniej dlugosci!";
		return -1;
	}

	napis.resize(liczba_znakow); 
	/*
	funkcja generator generuje przypadkowe wartosci dla kazdego elementu
	wiec powinien miec taki sam rozmiar jak haslo
	*/

	do
	{
		system("cls");
		generator(napis);
		liczba_podejsc++;
		cout << endl << " " << liczba_podejsc << ". Podano: " << haslo << ". Wylosowano: " << napis << endl;
		Sleep(50);
	} while (haslo != napis);

	cout << " Odgadlem Twoje haslo w " << liczba_podejsc << " probie! :)" << endl;
	system("pause");
}

void generator(string& napis)
{
	const static int ile_liter = 'z' - 'a' + 1;
	for (int i = 0; i < napis.length(); i++)
	{
		napis[i] = 'a' + rand() % ile_liter;
	}
}
komentarz 15 stycznia 2018 przez Mick_SQ6IYV Użytkownik (750 p.)
Super, zadziałało:) Dziękuję bardzo za pomoc:)

Podobne pytania

0 głosów
1 odpowiedź 46 wizyt
0 głosów
2 odpowiedzi 98 wizyt
pytanie zadane 14 sierpnia w C i C++ przez Mavimix Mądrala (5,320 p.)
0 głosów
1 odpowiedź 59 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

67,233 zapytań

114,194 odpowiedzi

242,038 komentarzy

45,643 pasjonatów

Przeglądających: 350
Pasjonatów: 8 Gości: 342

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...