Classe cchaine

Soyez le premier à donner votre avis sur cette source.

Vue 7 844 fois - Téléchargée 670 fois

Description

Une petite classe équivalente à la classe MFC CString mais en plus pratique

Source / Exemple :


#pragma once

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

class CChaine
{
private:
	int m_iTailleChaine;
	char* m_strChaine;

public:
	//constructeur par défaut
	CChaine(void);
	//constructeur de copie
	CChaine(const CChaine& cpChaine);
	//constructeur de copie pointeur
	CChaine(const CChaine* cpChaine);
	//constructeur avec argument (chaîne de caractères)
	CChaine(const char* strArgChaine);
	//constructeur avec argument (int)
	CChaine(const int iArg);
	//constructeur avec argument(unsigned int)
	CChaine(const unsigned int uiArg);
	//constructeur avec argument(float)
	CChaine(const float fArg);
	//constructeur avec argument(double)
	CChaine(const double dArg);
	//constructeur avec argument(long)
	CChaine(const long lArg);
	//constructeur avec argument(char)
	CChaine(const char cArg);

	//destructeur
	~CChaine(void);

	//opérateur tableau, retourne le caractère à l'index
	char operator [](int iIndex) const;
	//opérateur comparaison(==)
	int operator ==(const CChaine& argChaine) const;
	//opérateur comparaison(!=)
	int operator !=(const CChaine& argChaine) const;
	//opérateur addition(+=)
	CChaine operator +=(const CChaine& argChaine);
	//opérateur addition symétrique (+)
	friend CChaine operator +(const CChaine& argChaine1,const CChaine& argChaine2);
	//opérateur affectation(=)
	CChaine operator =(const CChaine& argChaine);
	//incrémente tous les caractères alphanumériques
	CChaine operator ++();
	//décrémentete tous les caractères alphanumériques
	CChaine operator --();

	//retourne TRUE si la chaine est vide
	BOOL IsVide(void) const;
	//retourne la taille de la chaîne
	int GetTaille(void) const;
	friend size_t strlen(const CChaine& Chaine);
	//retourne le nombre d'occurrences d'un caractère dans la chaîne
	int NbOccurances(char cCaract) const;
	//retourne le nombre d'occurrences d'une chaîne dans la chaîne
	int NbOccurances(const char* strOccur) const;
	//compare avec casse (identique à ==)
	int CompareAvecCasse(const CChaine& argChaine) const;
	//compare sans casse
	int CompareSansCasse(const CChaine& argChaine) const;
	//retourne l'index de la première occurence du caractère
	int GetPos(char cCaract) const;

	//retourne la valeur int correspondante
	operator int() const;
	//retourne la valeur float correspondante
	operator float() const;
	//retourne la valeur double correspondante
	operator double() const;
	//retourne la valeur long correspondante
	operator long() const;
	//retourne la valeur char correspondante
	operator char() const;
	//retourne la chaine terminée par '\0'
	operator const char*() const;

	//remplace toutes les occurences d'un caractère par un autre
	void Remplace(char cCaract1,char cCaract2);
	//remplace toutes les occurences d'une chaîne par une autre
	void Remplace(const char* strChaine1,const char* strChaine2);
	//insère une chaîne à un emplacement donné
	void Insert(const char* strChaine, int iEmplacement);
	//supprime le caractère de la chaine placé à l'index
	void Supprime(int iIndex);
	//supprime toutes les occurrences d'un caractère dans la chaîne
	void Supprime(char cCaract);
	//supprime toutes les occurrences d'une chaine dans la chaîne
	void Supprime(const char* strChaine);
	//renverse tous les caractères (le premier sera le dernier)
	void Renverse(void);
	//convertis en majuscules
	void ConvertMaj(void);
	//convertir en minuscule
	void ConvertMin(void);
	//extrait la partie gauche de la chaîne
	friend CChaine GaucheStr(const CChaine& strChaine, int iNbCaract);
	//extrait le milieu de la chaîne
	friend CChaine MilieuStr(const CChaine& strChaine, int iDebut, int iNbCaract);
	//extrait la partie droite de la chaîne
	friend CChaine DroiteStr(const CChaine& strChaine, int iNbCaract);
	//vide la chaine
	void Reset(void);
};

Conclusion :


Vos commentaires sont les bienvenus...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
Oui, d'accord pour ca, mais la on parle de ce qui ne peut etre inliner, tels que les callbacks ou accessoirement les expressions vectorielles (mais trés utile dans les domaines scientifiques).

L'article montre en gros que les templates permettent de résoudre à la compilation pas mal de tuyauteries imbriquées bien complexes, pour peu qu'on enrobe ca de templates qui seront forcement dérouler et inliner à la compilation.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
ben c'est clair, si j'ecris
strcpy(buff, psz);
le compilo met l'asm direct dans le code, il n'y a aucun appel de fonction car strcpy est macro.
Si on peut trouver + rapide, qu'on me le signale.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
Comment ca ? Qu'est ce que tu entends par "Aucun callback en C cause qu'il n'y a pas de fonctions" ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Je lis cela au debut:
The expression can be inlined into the function body, which results in faster and more convenient code than C-style callback functions.

Ai-je mal compris ? On parle de fonctions de chaines genre strcpy, strcat, etc... Aucun callback en C cause qu'il n'y a pas de fonctions, le compilo met tout l'asm direct dans le code, ces pseudos fonctions ne sont que des macros.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
Les tests serieux (ceux fais avec un vrai compilateur C++ et une vrai STL) montre en gros 5% de difference, comparé au cout de maintenance infiniment plus faible.

Globalement en C++ on est cencé atteindre des performances au dessus du C car l'optimiseur dispose de plus d'information sur le code (constance, typage tres puissant, OO, templates). En C la traduction est trop proche du source (c'est plus au programmeur d'optimiser).

BruNews, si tu as le temps, tu pourrais jeter un oeil à cet article (qui n'est qu'un apercu de l'iceberg) ?
http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html
Afficher les 17 commentaires

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.