#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct s_String {
//Notre chaine
char * str;
//Nos Methodes
size_t ( * length) ( struct s_String * this) ;
char ( * get) ( struct s_String * this, int pos) ;
void ( * replace) ( struct s_String * this, int pos, char newChar) ;
void ( * add) ( struct s_String * this, char newChar) ;
void ( * destroy) ( struct s_String * this) ;
} String;
static size_t length( String * this) {
}
static char get( String * this, int pos) {
return this-> str[ pos] ;
}
static void destroy( String * this) {
this-> str = NULL;
}
static void replace( String * this, int pos, char newChar) {
this-> str[ pos] = newChar;
}
static void add( String * this, char newChar) {
char * newStr;
//Bien sur les mallocs doivents etre verifés
newStr
= malloc ( sizeof ( char ) * ( this
-> length
( this
) + 2 ) ) ; this-> str = newStr;
}
String * create( char * s) {
String * this;
this
= malloc ( sizeof ( String
) ) ; this-> length = & length;
this-> get = & get;
this-> replace = & replace;
this-> add = & add;
this-> destroy = & destroy;
/* Copie de la chaine au cas ou c'est une chaine constante */
return this;
}
int main( void ) {
String * chaine = create( "Coucou les amis" ) ;
printf ( "taille de la chaine : %zd\n " , chaine
-> length
( chaine
) ) ; printf ( "Le premier caractere est : %c\n " , chaine
-> get
( chaine
, 0 ) ) ; chaine-> replace( chaine, 0 , 'T' ) ;
printf ( "Je remplace le premiere char par un T\n " ) ; printf ( "Le premier caractere est : %c\n " , chaine
-> get
( chaine
, 0 ) ) ; printf ( "J\' ajoute le caractere '&' a la fin de la chaine\n " ) ; chaine-> add( chaine, '&' ) ;
printf ( "La chaine est maintenant %s\n " , chaine
-> str
) ;
chaine-> destroy( chaine) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3Qgc19TdHJpbmcgewoJLy9Ob3RyZSBjaGFpbmUKCWNoYXIgKnN0cjsKCgkvL05vcyBNZXRob2RlcwoJc2l6ZV90ICgqbGVuZ3RoKShzdHJ1Y3Qgc19TdHJpbmcgKnRoaXMpOwoJY2hhciAoKmdldCkoc3RydWN0IHNfU3RyaW5nICp0aGlzLCBpbnQgcG9zKTsKCXZvaWQgKCpyZXBsYWNlKShzdHJ1Y3Qgc19TdHJpbmcgKnRoaXMsIGludCBwb3MsIGNoYXIgbmV3Q2hhcik7Cgl2b2lkICgqYWRkKShzdHJ1Y3Qgc19TdHJpbmcgKnRoaXMsIGNoYXIgbmV3Q2hhcik7Cgl2b2lkICgqZGVzdHJveSkoc3RydWN0IHNfU3RyaW5nICp0aGlzKTsKCn1TdHJpbmc7CgpzdGF0aWMgc2l6ZV90IGxlbmd0aChTdHJpbmcgKnRoaXMpIHsKCXJldHVybiBzdHJsZW4odGhpcy0+c3RyKTsKfQoKc3RhdGljIGNoYXIgZ2V0KFN0cmluZyAqdGhpcywgaW50IHBvcykgewoJcmV0dXJuIHRoaXMtPnN0cltwb3NdOwp9CgpzdGF0aWMgdm9pZCBkZXN0cm95KFN0cmluZyAqdGhpcykgewoJZnJlZSh0aGlzLT5zdHIpOwoJdGhpcy0+c3RyID0gTlVMTDsKfQoKCnN0YXRpYyB2b2lkIHJlcGxhY2UoU3RyaW5nICp0aGlzLCBpbnQgcG9zLCBjaGFyIG5ld0NoYXIpIHsKCXRoaXMtPnN0cltwb3NdID0gbmV3Q2hhcjsKfQoKc3RhdGljIHZvaWQgYWRkKFN0cmluZyAqdGhpcywgY2hhciBuZXdDaGFyKSB7CgljaGFyICpuZXdTdHI7CgoJLy9CaWVuIHN1ciBsZXMgbWFsbG9jcyBkb2l2ZW50cyBldHJlIHZlcmlmw6lzCgluZXdTdHIgPSBtYWxsb2Moc2l6ZW9mKGNoYXIpICogKHRoaXMtPmxlbmd0aCh0aGlzKSArIDIpKTsKCXN0cmNweShuZXdTdHIsIHRoaXMtPnN0cik7CglzdHJuY2F0KG5ld1N0ciwgJm5ld0NoYXIsIDEpOwoJZnJlZSh0aGlzLT5zdHIpOwoJdGhpcy0+c3RyID0gbmV3U3RyOwp9CgpTdHJpbmcgKmNyZWF0ZShjaGFyICpzKSB7CgoJU3RyaW5nICp0aGlzOwoKCXRoaXMgPSBtYWxsb2Moc2l6ZW9mKFN0cmluZykpOwoJdGhpcy0+bGVuZ3RoID0gJmxlbmd0aDsKCXRoaXMtPmdldCA9ICZnZXQ7Cgl0aGlzLT5yZXBsYWNlID0gJnJlcGxhY2U7Cgl0aGlzLT5hZGQgPSAmYWRkOwoJdGhpcy0+ZGVzdHJveSA9ICZkZXN0cm95OwoJLyogQ29waWUgZGUgbGEgY2hhaW5lIGF1IGNhcyBvdSBjJ2VzdCB1bmUgY2hhaW5lIGNvbnN0YW50ZSAqLwoJdGhpcy0+c3RyID0gbWFsbG9jKChzdHJsZW4ocykgKyAxKSAqIHNpemVvZihjaGFyKSk7CglzdHJjcHkodGhpcy0+c3RyLCBzKTsKCXJldHVybiB0aGlzOwp9CgppbnQgbWFpbih2b2lkKSB7CglTdHJpbmcgKmNoYWluZSA9IGNyZWF0ZSgiQ291Y291IGxlcyBhbWlzIik7CglwcmludGYoInRhaWxsZSBkZSBsYSBjaGFpbmUgOiAlemRcbiIsIGNoYWluZS0+bGVuZ3RoKGNoYWluZSkpOwoJcHJpbnRmKCJMZSBwcmVtaWVyIGNhcmFjdGVyZSBlc3QgOiAlY1xuIiwgY2hhaW5lLT5nZXQoY2hhaW5lLCAwKSk7CgljaGFpbmUtPnJlcGxhY2UoY2hhaW5lLCAwLCAnVCcpOwoJcHJpbnRmKCJKZSByZW1wbGFjZSBsZSBwcmVtaWVyZSBjaGFyIHBhciB1biBUXG4iKTsKCXByaW50ZigiTGUgcHJlbWllciBjYXJhY3RlcmUgZXN0IDogJWNcbiIsIGNoYWluZS0+Z2V0KGNoYWluZSwgMCkpOwoJcHJpbnRmKCJKXCdham91dGUgbGUgY2FyYWN0ZXJlICcmJyBhIGxhIGZpbiBkZSBsYSBjaGFpbmVcbiIpOwoJY2hhaW5lLT5hZGQoY2hhaW5lLCAnJicpOwoJcHJpbnRmKCJMYSBjaGFpbmUgZXN0IG1haW50ZW5hbnQgJXNcbiIsIGNoYWluZS0+c3RyKTsKCgljaGFpbmUtPmRlc3Ryb3koY2hhaW5lKTsKCglmcmVlKGNoYWluZSk7CgoJcmV0dXJuIDA7Cn0=