Stl : filtrer le caractere clavier et constituer une chaine

Contenu du snippet

Un exemple de plus sur la saisie caractère par caractère en vérifiant que chacun fait parti d'un filtre pour constituer une chaîne.
Il met en euvre la STL par une fonction de Algorithm permettant de contrôler que le caractère appartient au filtre, les sorties formatées et string.
Il utilise la fonction getch() du C pour faire une saisie bas niveau.

Le FILTRE donne les caractères autorisés.

Le programme a pour objectif d'utiliser des possibilités de la STL.

Source / Exemple :


//---- STL : Filtrer le caractere clavier et constituer  une chaine ----
//  	Met en oeuvre
//	  - getch() du C
//	  - les W formatees
//	  - string
//	  - la fonction binary_search() de Algorithm
//--------------------------------- David Saint-Mellion 12/02/2003 -----

#include <conio.h>	// getch()
#include <iostream>	// cout, endl
#include <algorithm>	// binary_search()
#include <string>
using namespace std;

  // Filtre des caracteres classes par ordre croissant
  // de la table ASCII pour binary_search().
  string FILTRE("+,/0129ABCW[]\abez{|}"); 

int main(){
	string bufferSaisie;
	char carSaisie;

	cout<<"Saisir, caracteres autorises : "<<FILTRE<<endl;
	
	do{
	// debut Tq
	    // Saisie d'un caractere
	    carSaisie=getch();
	    // Teste si le caractere appartient au FILTRE
	    if (binary_search(FILTRE.begin(),FILTRE.end(),carSaisie))
	       // Si vrai ajoute le caractere au bufferSaisie
	       bufferSaisie = bufferSaisie + carSaisie;
	    // Affiche le bufferSaisie
	   cout<<'\r'<<"SAISIE :"<<bufferSaisie;
	// Repeter Tq different de Return	
	}while (carSaisie!=0x0D);
	
	return 0;
}

// --------------------------- Fonction utilisee ---------------------------
// Recherche binaire de la valeur d'un objet dans une sequence triee
//  - bool binary_search(itrForward Prem, itrForward Dern, const T &Valeur);
//  Retourne true si Valeur appartient a la sequence itrPrem-itrDern
// -------------------------------------------------------------------------

Conclusion :


Condition :
- Il faut que les caractères du FILTRE soit classés par ordre croissant de la table ASCII
pour que la fonction binary_search() soit efficace.

Extention :
- Il peut être plus simple, dans certaines situations, de définir les caractères interdits. Dans ce cas, il faut les donner dans FILTRE et inverser la valeur de retour de la fonction binary_search() avec l'opérateur '!'

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.