All pastes #461731 Raw Edit

Miscellany

public text v1 · immutable
#461731 ·published 2007-04-27 21:11 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{
	// déclaration des variables
	char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
	char pwd[100];
	char first_char, current_char, next_char;

	int fini = 0;
	int i;
	
	int size_alph;
	int size_pwd;
	int position;

	sprintf(pwd,"%c",alphabet[0]); // password de départ
	
	first_char = alphabet[0];
	
	size_alph = strlen(alphabet);
	size_pwd = strlen(pwd);

	while(!fini)
	{
		printf("%s\n", pwd);
		
		position = size_pwd - 1; // on place le focus sur le dernier caractère

		while(pwd[position] == alphabet[size_alph-1]) position--; // tant que l'on a le dernier caractère, on remonte

		// Si on a trop remonté, on crée un nouveau caractère car la chaine est de la forme "z", "zz", "zzz", ...
		if(position<0)
		{
			pwd[size_pwd] = first_char; // ajout d'un char
			for(i=0 ; i < size_pwd ; i++) pwd[i] = first_char; // on remet tout à zéro (inutile pour le dernier char déjà initialisé) :
			
			size_pwd += 1; // on actualise la taille
			
			pwd[size_pwd] = '\0';
		}
		else
		{
			// sinon on incrémente le caractère sur lequel on a le focus
			
			current_char = pwd[position];
			i=0; 
			next_char = 0;
			
			// on cherche la lettre suivante dans l'alphabet
			while(!next_char)
			{
				if(alphabet[i] == current_char) next_char = alphabet[i+1];
				i++;
			}
			
			pwd[position] = next_char; // on met à jour la caractère

			// tous les caractères qui suivent le caractère changé doivent être remis à zéro  
			for(i=position+1 ; i < size_pwd ; i++) pwd[i] = alphabet[0];
		}
	}

	return 0;
}