TYPE DE DONNÉE PERSONNALISÉ : STRING

Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008 - 5 juil. 2004 à 18:50
cs_Light Angel Messages postés 48 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 1 janvier 2005 - 18 juil. 2004 à 18:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24265-type-de-donnee-personnalise-string

cs_Light Angel Messages postés 48 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 1 janvier 2005
18 juil. 2004 à 18:41
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++)
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
6 juil. 2004 à 02:52
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.
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
6 juil. 2004 à 01:08
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...
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
5 juil. 2004 à 23:25
je vois pas de définition de Mid, ni de Asc
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
5 juil. 2004 à 23:23
sinon, il existe std::string, défini dans <string>, 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.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
5 juil. 2004 à 23:20
En C, on réfléchi po => 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:

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

void SaveFile(char *File); => void SaveFile(const char *File) const;
void LoadFile(char *File); => void LoadFile(const char *File);

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

char Asc(int Start); => char Asc(int Start) const;

char *ToSring(void); => et la version const ? le (void) est utilisé en C, pas en C++
cs_Light Angel Messages postés 48 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 1 janvier 2005
5 juil. 2004 à 20:58
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) ...
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
5 juil. 2004 à 19:30
#include <stdio.h> // Gère les E/S
#include <stdlib.h> // Gère system(char *)
#include <string.h> // Gère les chaine de caractères
#include <fstream.h> // Gère les fichiers
#include

=>>

#include
#include <cstdlib> // Gère system(char *) =>system c'est mal :o
#include <cstring> // Gère les chaine de caractères
#include <fstream> // Gère les fichiers
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
5 juil. 2004 à 18:50
Sympa, mais quelques trucs plutot énervants :
char String::operator [](int Index) const
{
// Teste Index
if (Index < 0 || Index >= 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 <, > 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 =)