-
Notifications
You must be signed in to change notification settings - Fork 8
/
chaine.c
139 lines (94 loc) · 2.36 KB
/
chaine.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
Classe: chaine.c
Description: Structure objet pour definir une chaine de caracteres et ses attributs
Auteurs: Alain Sirois SIRA15068305
Philippe Mercure MERP27078708
Date: 18 juin 2011
Cours: yyyyyyyyyy
Groupe: 30
Travail: TP2
Professeur: xxxxxxxxxx
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "chaine.h"
struct chaine {
int taille;
char* cars;
int totalAlloc;
};
/*
Creer une chaine vide
*/
Chaine chaineCreerVide( int longueur ){
Chaine maChaine = (Chaine) malloc (sizeof(struct chaine));
if ( maChaine == NULL )
return NULL;
maChaine->cars = (char*) malloc (longueur * sizeof(unsigned char));
if ( maChaine->cars == NULL )
return NULL;
// Paramétrage de la Chaine
maChaine->taille = 0;
maChaine->cars[0] = '\0';
maChaine->totalAlloc = longueur;
return maChaine;
}
/*
Ajouter un caractere a la fin d'une chaine
*/
int chaineAjouter( Chaine ch, unsigned char carac ){
assert (ch != NULL && "ch doit être un pointeur non NULL");
int longueur = chaineLongueur(ch);
/*** Ajout d'un caractère SANS réallocation ***/
if ( longueur < (ch->totalAlloc - 1) ) {
ch->cars[longueur] = carac;
ch->cars[longueur + 1] = '\0';
ch->taille++;
return 0;
}
/*** Ajout d'un caractère AVEC réallocation ***/
ch->cars = (char*) realloc (ch->cars, ((ch->totalAlloc * sizeof(unsigned char)) + (50 * sizeof(unsigned char))));
if ( ch->cars == NULL )
return 1;
ch->cars[longueur] = carac;
ch->totalAlloc = ch->totalAlloc + 50;
ch->cars[longueur + 1] = '\0';
ch->taille++;
return 0;
}
/*
Enlever le dernier caractere d'une chaine
*/
int chaineEnlever( Chaine ch ) {
assert (ch != NULL && "ch doit être un pointeur non NULL");
int longueur = chaineLongueur(ch);
if ( longueur == 0 )
return 0;
ch->cars[longueur-1] = '\0';
ch->taille--;
return 0;
}
/*
Retourne la valeur d'une chaine
*/
char* chaineValeur( Chaine ch ){
assert (ch != NULL && "ch doit être un pointeur non NULL" );
return ch->cars;
}
/*
Retourne la longueur d'une chaine
*/
int chaineLongueur( Chaine ch ){
assert (ch != NULL && "ch doit être un pointeur non NULL" );
return ch->taille;
}
/*
Supprimer une chaine
*/
void chaineSupprime( Chaine ch ){
assert (ch != NULL && "ch doit être un pointeur non NULL vers une chaine créé par ChaineCree");
free (ch->cars);
free (ch);
}