begin process at 2012 02 08 10:51:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > TYPE DE DONNÉE PERSONNALISÉ : STRING

TYPE DE DONNÉE PERSONNALISÉ : STRING


 Information sur la source

Note :
6,33 / 10 - par 6 personnes
6,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Initié Date de création :04/07/2004 Date de mise à jour :18/07/2004 18:49:27 Vu / téléchargé :8 038 / 124

Auteur : Light Angel

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

C'est une classe pas tout à fait terminé mais bon, elle est fonctionnelle est c'est déja sa ...
J'ai ecrit le source dans un fichier .hpp (je sais, il ne faut pas mêttre de fonction dans les headers, mais j'avais la flemme de faire un fichier cpp à coté, bon bref, dans le fichier .hpp, j'ai rajouté un teste dans le préprocésseur pour éviter de compiler le fichier plusieurs fois (si on l'inclut plusieurs fois) :
#ifndef STRING
#define STRING NULL
...
...
...
#endif

Source

  • // Ne compile le fichier qu'une seul fois --------------------------------------
  • #ifndef STRING
  • #define STRING NULL
  • // Directive #include ----------------------------------------------------------
  • #include <stdio.h> // Gère la structure FILE
  • #include <stdlib.h> // Gère system(const char *)
  • #include <string> // Gère les chaine de caractères
  • #include <fstream> // Gère les fichiers
  • #include <iostream> // Gère les E/S
  • // Utilise les standard C++ ----------------------------------------------------
  • using namespace std;
  • // Constantes ------------------------------------------------------------------
  • #define LINE '\n' // Saut de ligne
  • #define TAB '\t' // Tabulation
  • #define BEEP '\a' // Produit un "beep"
  • #define NULLT '\0' // Null terminal
  • // Déclaration de la classe ---------------------------------------------------
  • class String
  • {
  • // Membres privés ----------------------------------------------------------
  • private:
  • char *Char; // Chaine principale
  • int MemSize; // Taille de la mémoire
  • int Len; // Nombre de caractère de *pChaine
  • char *NewMemory(int Lenght); // Fonction utilisé par le constructeur
  • // Membres publiques -------------------------------------------------------
  • public :
  • // Constructeurs --------------------------------------------------------------
  • String(const char *Str = "");
  • String(const String & Source);
  • String(char strString);
  • String(int Lengh);
  • // Destructeur -----------------------------------------------------------------
  • ~String();
  • // Opérateurs surchargé ----------------------------------------------------
  • // Opérateurs mathématiques ----------------------------------------------
  • char operator [] (int Index) const;
  • String & operator = (const String & Source);
  • friend String operator + (const String & S1, const String & S2);
  • friend String operator & (const String & S1, const String & S2);
  • // Opérateurs de comparaisons ----------------------------------
  • friend int operator != (const String & S1, const String & S2);
  • friend int operator == (const String & S1, const String & S2);
  • friend int operator < (const String & S1, const String & S2);
  • friend int operator > (const String & S1, const String & S2);
  • friend int operator <= (const String & S1, const String & S2);
  • friend int operator >= (const String & S1, const String & S2);
  • //Opérateurs d'E/S -------------------------------------------------
  • friend ostream & operator << (ostream & Flux, const String & Source);
  • friend istream & operator >> (istream & Flux, String & Source);
  • // Méthodes ----------------------------------------------------------------
  • bool SaveFile(const char *File); // Enregistre Char dans un fichier
  • void LoadFile(const char *File); // Récupère les données d'un fichier
  • // Méthodes utiles ---------------------------------------------------------
  • inline int Lenght(void); // Retourne this->Len
  • inline int Asc(int Index); // Retourne le code ASCII
  • inline char *ToString(void) const; // Convertit un String en char
  • String Left(int Lenght); // Retourne les X caractère de gauche
  • String Right(int Lenght); // Retourne les X caractère de droite
  • String Mid(int Start, int Lengh); // Retourne les X caractère de Start
  • };
  • // Fonction membres de string --------------------------------------------------
  • // Constructeurs surchargés ----------------------------------------------------
  • String::String(const char *str)
  • {
  • // Défint Char
  • Len = strlen(str);
  • Char = NewMemory(Len);
  • // Copie Chn dans Char
  • strcpy(Char, str);
  • }
  • String::String(int Lengh)
  • {
  • // Nombre de caractère = 0
  • Len = 0;
  • // Alloue dynamiquement Char
  • Char = NewMemory(Lengh);
  • Char[0] = NULLT;
  • }
  • String::String(const String & Source)
  • {
  • // Définit Char selon une référence
  • Len = Source.Len;
  • Char = NewMemory(Source.Len);
  • // Copie Char de la référence dans Char
  • strcpy(Char, Source.Char);
  • }
  • String::String(char String)
  • {
  • // Définit les membres
  • Len = 1;
  • Char = NewMemory(Len);
  • *Char = String;
  • // Ajoute le null terminal
  • *(Char + 1) = NULLT;
  • }
  • // Destructeur -----------------------------------------------------------------
  • String::~String()
  • {
  • // Désaloue Char
  • if(Char) delete [] Char;
  • // Désactive le pointeur
  • Char = NULL;
  • }
  • // Fonction NewMemory ----------------------------------------------------------
  • char *String::NewMemory(int Lengh)
  • {
  • if (Lengh < 0)
  • {
  • // Quitte la fonction
  • return NULL;
  • }
  • // Garde de la place pour le nul terminal
  • MemSize = Lengh + 1;
  • // Alloue dynamiquemenr un pointeur vers char
  • char *P = new char[MemSize];
  • // Teste si l'allocation à réussi
  • if (! P)
  • {
  • // Quitte la fonction
  • return NULL;
  • }
  • // Retourne l'addresse de P
  • return P;
  • }
  • // Fonction ToString -----------------------------------------------------------
  • char *String::ToString(void) const
  • {
  • // Retourne Char
  • return Char;
  • }
  • // Fonction ASC ----------------------------------------------------------------
  • int String::Asc(int Index)
  • {
  • // Utilise l'operateur [] précédement surchargé
  • int intAscii = Char[Index];
  • return intAscii;
  • }
  • // Fonction Left ---------------------------------------------------------------
  • String String::Left(int Lenght)
  • {
  • // Teste si Lenght est > a la taille de la chaine
  • if (Lenght > Len)
  • {
  • // Retourne une valeur bidon
  • String Error("Erreur : Lenght plus grand que strlen(Char)");
  • return Error;
  • }
  • // Crée deux object String
  • String S1(Char);
  • String S2(Lenght);
  • // Récupère les caractère l'un apres l'autre
  • for (int intI = 0; intI < Lenght; intI++)
  • S2 = S2 & S1[intI];
  • // Retourne l'objet S2
  • return S2;
  • }
  • // Fonction Right --------------------------------------------------------------
  • String String::Right(int Lenght)
  • {
  • // Teste si Lenght > Len
  • if (Lenght > Len)
  • {
  • // Retourne une valeur bidon
  • String strError("Erreur : Lenght lus grand que strlen(Char)");
  • return strError;
  • }
  • // Crée deux object String
  • String S1(Char);
  • String S2(Lenght);
  • // Récupère les caractère l'un après l'autre
  • for (int intI = 0; intI < Lenght; intI++)
  • S2 = S1[Len - intI - 1] & S2;
  • // Retourne l'objet S2
  • return S2;
  • }
  • // Fonction Mid ----------------------------------------------------------------
  • String String::Mid(int Start, int Lenght)
  • {
  • // Teste si Start est < ou > au extrémité
  • if (Start < 0 || Start > Len)
  • {
  • // Retourne un message d'erreur
  • String strError("Start < à 0 ou > à Lenght()");
  • return strError;
  • }
  • // Teste si Lenght <= 0
  • if (Lenght <= 0)
  • {
  • // Retourne une chaine nulle
  • String strNull(NULL);
  • return strNull;
  • }
  • // Crée deux object String
  • String S1(Char);
  • String S2(Lenght);
  • // Récupère les caractère l'un apres l'autre
  • for (int intI = Start; intI < Lenght; intI++)
  • S2 = S2 & S1[intI];
  • // Retourne l'objet S2
  • return S2;
  • }
  • // Fonction Lenght -------------------------------------------------------------
  • int String::Lenght(void)
  • {
  • // Retourne Len
  • return this->Len;
  • }
  • // Fonction SaveFile -----------------------------------------------------------
  • bool String::SaveFile(const char *File)
  • {
  • // Enregistre Char dans un fichiers
  • ofstream fout(File, ios::trunc);
  • // Teste l'ouverture du fichier
  • if (! fout)
  • return false;
  • // Imprime Char dans le fichier
  • fout << Char;
  • // Ferme le fichier
  • fout.close();
  • // Retourne vrai
  • return true;
  • }
  • // Fonction LoadFile -----------------------------------------------------------
  • void String::LoadFile(const char *File)
  • {
  • }
  • // Opérateurs surchargé --------------------------------------------------------
  • // Opérateur d'indexation ------------------------------------------------------
  • char String::operator [](int Index) const
  • {
  • // Teste Index
  • if (Index < 0 || Index >= Len)
  • {
  • // Quitte la fonction
  • return NULL;
  • }
  • // Retourne un caractère
  • return Char[Index];
  • }
  • // Opérateur d'affectation -----------------------------------------------------
  • String & String::operator =(const String & Source)
  • {
  • // Teste si la référence est valable
  • if (this != &Source)
  • {
  • if ((MemSize - 1) < Source.Len)
  • {
  • // Supprime Char et le réalloue dynamiquement
  • delete [] Char;
  • Char = NewMemory(Source.Len);
  • }
  • // Copie la chaine de la référence dans Char
  • strcpy(Char, Source.Char);
  • Len = Source.Len;
  • }
  • // Renvoi la valeur de l'adresse d'un pointeur vers String
  • return *this;
  • }
  • // Opérateur d'addition --------------------------------------------------------
  • String operator +(const String & S1, const String & S2)
  • {
  • // Crée des objet String temporaires
  • String Temp(S1.Len + S2.Len);
  • strcat(strcpy(Temp.Char, S1.Char), S2.Char);
  • Temp.Len = strlen(Temp.Char);
  • // Retourne un objet String : Temp
  • return Temp;
  • }
  • // Autre opérateur d'addition --------------------------------------------------
  • String operator &(const String & S1, const String & S2)
  • {
  • // Crée des objet String temporaires
  • String Temp(S1.Len + S2.Len);
  • strcat(strcpy(Temp.Char, S1.Char), S2.Char);
  • Temp.Len = strlen(Temp.Char);
  • // Retourne un objet String : Temp
  • return Temp;
  • }
  • // Opérateur d'inégalité -------------------------------------------------------
  • int operator !=(const String & S1, const String & S2)
  • {
  • // Retourne le résultat de strcmp
  • return strcmp(S1.Char, S2.Char);
  • }
  • // Opérateur d'égalité ---------------------------------------------------------
  • int operator ==(const String & S1, const String & S2)
  • {
  • // Retourne strcmp
  • return(strcmp(S1.Char, S2.Char));
  • }
  • // Opérateur supérieur ---------------------------------------------------------
  • int operator >(const String & S1, const String & S2)
  • {
  • // Retourne le résultat de strcmp
  • return (strcmp(S1.Char, S2.Char) > 0);
  • }
  • // Opérateur inferieur ---------------------------------------------------------
  • int operator <(const String & S1, const String & S2)
  • {
  • // Retourne le résultat de strcmp
  • return (strcmp(S1.Char, S2.Char) < 0);
  • }
  • // Opérateur superieur ou égal -------------------------------------------------
  • int operator >=(const String & S1, const String & S2)
  • {
  • // Retourne une comparaison avec <
  • return (! (S1 < S2));
  • }
  • // Opérateur inferieur ou égal -------------------------------------------------
  • int operator <=(const String & S1, const String & S2)
  • {
  • // Retourne une comparaison avec >
  • return (! (S1 > S2));
  • }
  • // Opérateur de sortie << ------------------------------------------------------
  • ostream & operator << (ostream & Flux, const String & Source)
  • {
  • // Retourne le Flot
  • return Flux << Source.Char;
  • }
  • // Opérateur d'entré >> --------------------------------------------------------
  • istream & operator >> (istream & Flux, String & Source)
  • {
  • // Lit Source par morceau
  • const int MaxSize = 5;
  • char c;
  • // Vide Source
  • Source = "";
  • // Crée un objetString Temporaire
  • String Temp(MaxSize);
  • Flux.get(c);
  • // Boucle jusqu'a ce que c = LINE
  • while (c != LINE)
  • {
  • // Continue
  • Flux.putback(c);
  • Flux.get(Temp.Char, Temp.MemSize - 1, LINE);
  • Temp.Len = strlen(Temp.Char);
  • Source = Source + Temp;
  • Flux.get(c);
  • }
  • // Reourne le Flot de donnée
  • return Flux;
  • }
  • // Fin de la directive #ifndef -------------------------------------------------
  • #endif
// Ne compile le fichier qu'une seul fois --------------------------------------
#ifndef STRING
#define STRING NULL
// Directive #include ----------------------------------------------------------
#include <stdio.h>                      // Gère la structure FILE
#include <stdlib.h>                     // Gère system(const char *)
#include <string>	                    // Gère les chaine de caractères
#include <fstream>						// Gère les fichiers
#include <iostream>						// Gère les E/S
// Utilise les standard C++ ----------------------------------------------------
using namespace std;
// Constantes ------------------------------------------------------------------
#define LINE			'\n'	// Saut de ligne
#define TAB			'\t'	// Tabulation
#define BEEP			'\a'	// Produit un "beep"
#define NULLT			'\0'	// Null terminal
// Déclaration de la classe ---------------------------------------------------
class String
{
    // Membres privés ----------------------------------------------------------
private:
    char *Char;                                 // Chaine principale
    int MemSize;                               // Taille de la mémoire
    int Len;                                       // Nombre de caractère de *pChaine
    char *NewMemory(int Lenght);  // Fonction utilisé par le constructeur
    // Membres publiques -------------------------------------------------------
public :
    // Constructeurs --------------------------------------------------------------
    String(const char *Str = "");
    String(const String & Source);
    String(char strString);
    String(int Lengh);
    // Destructeur -----------------------------------------------------------------
    ~String();
    // Opérateurs surchargé ----------------------------------------------------
   // Opérateurs mathématiques ----------------------------------------------
    char operator [] (int Index) const;
    String & operator = (const String & Source);
    friend String operator + (const String & S1, const String & S2);
	friend String operator & (const String & S1, const String & S2);
	// Opérateurs de comparaisons ----------------------------------
	friend int operator != (const String & S1, const String & S2);
	friend int operator == (const String & S1, const String & S2);
	friend int operator <  (const String & S1, const String & S2);
	friend int operator >  (const String & S1, const String & S2);
	friend int operator <= (const String & S1, const String & S2);
	friend int operator >= (const String & S1, const String & S2);
	//Opérateurs d'E/S -------------------------------------------------
	friend ostream & operator << (ostream & Flux, const String & Source);
	friend istream & operator >> (istream & Flux, String & Source);
    // Méthodes ----------------------------------------------------------------
    bool SaveFile(const char *File);    // Enregistre Char dans un fichier
    void LoadFile(const char *File);    // Récupère les données d'un fichier
    // Méthodes utiles ---------------------------------------------------------
	inline int Lenght(void);			// Retourne this->Len
    inline int Asc(int Index);          // Retourne le code ASCII
    inline char *ToString(void) const;  // Convertit un String en char
	String Left(int Lenght);			// Retourne les X caractère de gauche
	String Right(int Lenght);			// Retourne les X caractère de droite
	String Mid(int Start, int Lengh);	// Retourne les X caractère de Start
};
// Fonction membres de string --------------------------------------------------
// Constructeurs surchargés ----------------------------------------------------  
String::String(const char *str)
{
    // Défint Char
    Len = strlen(str);
    Char = NewMemory(Len);
    // Copie Chn dans Char
    strcpy(Char, str);
}
String::String(int Lengh)
{
    // Nombre de caractère = 0
    Len = 0;
    // Alloue dynamiquement Char
    Char = NewMemory(Lengh);
    Char[0] = NULLT;
}
String::String(const String & Source)
{
    // Définit Char selon une référence
    Len = Source.Len;
    Char = NewMemory(Source.Len);
    // Copie Char de la référence dans Char
    strcpy(Char, Source.Char);
}
String::String(char String)
{
    // Définit les membres
    Len = 1;
    Char = NewMemory(Len);
    *Char = String;
    // Ajoute le null terminal
    *(Char + 1) = NULLT;
}
// Destructeur -----------------------------------------------------------------
String::~String()
{
    // Désaloue Char
    if(Char) delete [] Char;
	// Désactive le pointeur
	Char = NULL;
}   
// Fonction NewMemory ----------------------------------------------------------
char *String::NewMemory(int Lengh)
{
    if (Lengh < 0)
    {
        // Quitte la fonction
        return NULL;
    }    
    // Garde de la place pour le nul terminal
    MemSize = Lengh + 1;
    // Alloue dynamiquemenr un pointeur vers char
    char *P = new char[MemSize];
    // Teste si l'allocation à réussi
    if (! P)
    {
        // Quitte la fonction
        return NULL;
    }
    // Retourne l'addresse de P
    return P;
}
// Fonction ToString -----------------------------------------------------------
char *String::ToString(void) const
{
	// Retourne Char
	return Char;
}
// Fonction ASC ----------------------------------------------------------------
int String::Asc(int Index)
{
	// Utilise l'operateur [] précédement surchargé
	int intAscii = Char[Index];
	return intAscii;
}
// Fonction Left ---------------------------------------------------------------
String String::Left(int Lenght)
{
	// Teste si Lenght est > a la taille de la chaine
	if (Lenght > Len)
	{
		// Retourne une valeur bidon
		String Error("Erreur : Lenght plus grand que strlen(Char)");
		return  Error;
	}
	// Crée deux object String
	String S1(Char);
	String S2(Lenght);
	// Récupère les caractère l'un apres l'autre
	for (int intI = 0; intI < Lenght; intI++)
		S2 = S2 & S1[intI];
	// Retourne l'objet S2
	return S2;
}
// Fonction Right --------------------------------------------------------------
String String::Right(int Lenght)
{
	// Teste si Lenght > Len
	if (Lenght > Len)
	{
		// Retourne une valeur bidon
		String strError("Erreur : Lenght lus grand que strlen(Char)");
		return strError;
	}
	// Crée deux object String
	String S1(Char);
	String S2(Lenght);
	// Récupère les caractère l'un après l'autre
	for (int intI = 0; intI < Lenght; intI++)
		S2 = S1[Len - intI - 1] & S2;
	// Retourne l'objet S2
	return S2;
}
// Fonction Mid ----------------------------------------------------------------
String String::Mid(int Start, int Lenght)
{
	// Teste si Start est < ou > au extrémité
	if (Start < 0 || Start > Len)
	{
		// Retourne un message d'erreur
		String strError("Start < à 0 ou > à Lenght()");
		return strError;
	}
	// Teste si Lenght <= 0
	if (Lenght <= 0)
	{
		// Retourne une chaine nulle
		String strNull(NULL);
		return strNull;
	}
	// Crée deux object String
	String S1(Char);
	String S2(Lenght);
	// Récupère les caractère l'un apres l'autre
	for (int intI = Start; intI < Lenght; intI++)
		S2 = S2 & S1[intI];
	// Retourne l'objet S2
	return S2;
}
// Fonction Lenght -------------------------------------------------------------
int String::Lenght(void)
{
	// Retourne Len
	return this->Len;
}
// Fonction SaveFile -----------------------------------------------------------
bool String::SaveFile(const char *File)
{
	// Enregistre Char dans un fichiers
	ofstream fout(File, ios::trunc);
	// Teste l'ouverture du fichier
	if (! fout)
		return false;
	// Imprime Char dans le fichier
	fout << Char;
	// Ferme le fichier
	fout.close();
	// Retourne vrai
	return true;
}
// Fonction LoadFile -----------------------------------------------------------
void String::LoadFile(const char *File)
{
}    
// Opérateurs surchargé --------------------------------------------------------
// Opérateur d'indexation ------------------------------------------------------
char String::operator [](int Index) const
{
	// Teste Index
	if (Index < 0 || Index >= Len)
	{
		// Quitte la fonction
		return NULL;
	}
	// Retourne un caractère
	return Char[Index];
}
// Opérateur d'affectation -----------------------------------------------------
String & String::operator =(const String & Source)
{
	// Teste si la référence est valable
	if (this != &Source)
	{
		if ((MemSize - 1) < Source.Len)
		{
			// Supprime Char et le réalloue dynamiquement
			delete [] Char;
			Char = NewMemory(Source.Len);
		}
		// Copie la chaine de la référence dans Char
		strcpy(Char, Source.Char);
		Len = Source.Len;
	}
	// Renvoi la valeur de l'adresse d'un pointeur vers String
	return *this;
}
// Opérateur d'addition --------------------------------------------------------
String operator +(const String & S1, const String & S2)
{
	// Crée des objet String temporaires
	String Temp(S1.Len + S2.Len);
	strcat(strcpy(Temp.Char, S1.Char), S2.Char);
	Temp.Len = strlen(Temp.Char);
	// Retourne un objet String : Temp
	return Temp;
}
// Autre opérateur d'addition --------------------------------------------------
String operator &(const String & S1, const String & S2)
{
	// Crée des objet String temporaires
	String Temp(S1.Len + S2.Len);
	strcat(strcpy(Temp.Char, S1.Char), S2.Char);
	Temp.Len = strlen(Temp.Char);
	// Retourne un objet String : Temp
	return Temp;
}
// Opérateur d'inégalité -------------------------------------------------------
int operator !=(const String & S1, const String & S2)
{
	// Retourne le résultat de strcmp
	return strcmp(S1.Char, S2.Char);
}
// Opérateur d'égalité ---------------------------------------------------------
int operator ==(const String & S1, const String & S2)
{
	// Retourne strcmp
	return(strcmp(S1.Char, S2.Char));
}
// Opérateur supérieur ---------------------------------------------------------
int operator >(const String & S1, const String & S2)
{
	// Retourne le résultat de strcmp
	return (strcmp(S1.Char, S2.Char) > 0);
}
// Opérateur inferieur ---------------------------------------------------------
int operator <(const String & S1, const String & S2)
{
	// Retourne le résultat de strcmp
	return (strcmp(S1.Char, S2.Char) < 0);
}
// Opérateur superieur ou égal -------------------------------------------------
int operator >=(const String & S1, const String & S2)
{	
	// Retourne une comparaison avec <
	return (! (S1 < S2));
}
// Opérateur inferieur ou égal -------------------------------------------------
int operator <=(const String & S1, const String & S2)
{
	// Retourne une comparaison avec >
	return (! (S1 > S2));
}
// Opérateur de sortie << ------------------------------------------------------
ostream & operator << (ostream & Flux, const String & Source)
{
	// Retourne le Flot
	return Flux << Source.Char;
}
// Opérateur d'entré >> --------------------------------------------------------
istream & operator >> (istream & Flux, String & Source)
{
	// Lit Source par morceau
	const int MaxSize = 5;
	char c;
	// Vide Source
	Source = "";
	// Crée un objetString Temporaire
	String Temp(MaxSize);
	Flux.get(c);
	// Boucle jusqu'a ce que c = LINE
	while (c != LINE)
	{
		// Continue
		Flux.putback(c);
		Flux.get(Temp.Char, Temp.MemSize - 1, LINE);
		Temp.Len = strlen(Temp.Char);
		Source = Source + Temp;
		Flux.get(c);
	}
	// Reourne le Flot de donnée
	return Flux;
}
// Fin de la directive #ifndef -------------------------------------------------
#endif

 Conclusion

J'aurais besoin d'aide pour la fonction LoadFile --- J'ai toujour besoin d'aide pour la fonction LoadFile

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

18 juillet 2004 18:49:27 :
-- Alla, c'est mis à jour ... (c'est toujour pas la version finale)

 Sources du même auteur

Source avec Zip LIBRAIRIE DE CLASSE POUR GTK+
Source avec Zip LA SUITE DE FIBONACCI

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

Commentaires et avis

Commentaire de Cyberboy2054 le 05/07/2004 18:50:02

Sympa, mais quelques trucs plutot énervants :
char String::operator [](int Index) const
{
    // Teste Index
    if (Index &lt; 0 || Index &gt;= Len)
    {
        // Quitte la fonction
        exit(3);
    }
    // Retourne un caractère
    return pString[Index];
}
Alors si la valeur te plait pas ca quitte le programme Oô ? fais un return -1; plutot que exit, comme ca le programmeur qui utilise ta source ne verra pas son programme se fermer pour une raison inconnue ...
operateur &lt;, &gt; etc avec des chaines c est bizarre, enfin bon chacun ses habitudes de code.
Ensuite fais gaffe, ton operateur == renvoie 0 si les 2 chaines sont identiques ...
Et pour la fonction loadfile ... tu ouvre le fichier, et tu lis les caracteres jusqu' a trouver \0 =)

Commentaire de BlackGoddess le 05/07/2004 19:30:15

#include &lt;stdio.h&gt;                      // Gère les E/S
#include &lt;stdlib.h&gt;                  // Gère system(char *)
#include &lt;string.h&gt;                  // Gère les chaine de caractères
#include &lt;fstream.h&gt;                    // Gère les fichiers
#include &lt;iostream&gt;

=&gt;&gt;

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;                  // Gère system(char *) =&gt;system c'est mal :o
#include &lt;cstring&gt;                  // Gère les chaine de caractères
#include &lt;fstream&gt;                    // Gère les fichiers

Commentaire de Light Angel le 05/07/2004 20:58:08

Bon ... déja, pour l'opérateur [], exit(3) ne quitte pas le programme mais la fonction. Ensuite, si c'est pour laisser des critiques sur les include, sa va ... On s'en fou un peu d'être dans les standart C++. Je vien de passer du C au C++, en C on se fait pas chier a savoir si tell ou tell fichier est standard ou pas ... En C, on réfléchi po, on inclut le fichier avec l'extension.h et on s'en tape de standard (Note, la je parlé pour moi, il doit surement y avoir des codeurs C moins bourrin que moi) ...

Commentaire de BlackGoddess le 05/07/2004 23:20:30

En C, on réfléchi po =&gt; bin bien sur ...

En C il existe un standard comme en C++

exit() quitte le programme et pas la fonction, et c'est à bannir en C++ (sauf pour le cas d'une faute grave irrécupérable) en effet, les destructeurs ne sont pas executé par défaut lors de cet appel.

(javais que lu les 1eres lignes)

le destructeur virtuel pour faciliter l'héritage et le polymorphisme

class String
{
    // Membres privés ----------------------------------------------------------
private:

=&gt; private: inutile, par défaut les membres d'une classes sont privés

void SaveFile(char *File); =&gt; void SaveFile(const char *File) const;
void LoadFile(char *File); =&gt; void LoadFile(const char *File);

char Mid(int Start, int Lengh); =&gt; je comprends pas vraiment le proto :
récupère DES caractères dans UN char ? manque le const

char Asc(int Start); =&gt; char Asc(int Start) const;

char *ToSring(void); =&gt; et la version const ? le (void) est utilisé en C, pas en C++

Commentaire de BlackGoddess le 05/07/2004 23:23:40

sinon, il existe std::string, défini dans &lt;string&gt;, chaque api propriétaire c++ définit en général sa propre classe de gestion de chaine (CString des MFC, AnsiString de Borland), et il y a deja des classes string sur ce site.

Commentaire de BlackGoddess le 05/07/2004 23:25:27

je vois pas de définition de Mid, ni de Asc

Commentaire de Cyberboy2054 le 06/07/2004 01:08:33

T es pas obligé de prendre mal les critiques qu on te fait ... on pas dit que ton code c est de la merde, loin de la, mais qu il y a des choses qui peuvent etre corrigés pour etre améliorés ...
ensuite les remarques sur les headers, c est pour t eviter des problemes plus tard de compatibilité ... menfin bon tu codes comme tu veux...

Commentaire de cosmobob le 06/07/2004 02:52:50

int operator ==(const String & S1, const String & S2)
{
    // Retourne 1 si strcmp retourne 0
    return(strcmp(S1.pString, S2.pString));
}

t'as oublié un ! devant le strcmp, vu que la tu renvoies pareil que strcmp.

Commentaire de Light Angel le 18/07/2004 18:41:37

Voila, je met a jour, j'ai rajouté quelques fonctions et rendu ce source standard( (using namespace std)
J'ai inclut les fonction Mid, Right et Left et rajouté  un opérateur de concaténation : & (pour ne pas trop dépaysier les habitué du VB qui ce lance dans le C++)

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,366 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales