// str.h #ifndef _STR_H_ #define _STR_H_ // Toutes ces fonctions allouent de la mémoire, ne pas oublier de la liberer // avec delete // Permet de récuperer les n premiers caractères d'une chaine char *str_left(char *chaine, int jusquOu); // Permet de récuperer les n derniers caractères d'une chaine char *str_right(char *chaine, int jusquOu); // Permet de récuperer un certain nombre de caractères à partire d'un certain rang char *str_mid(char *chaine, int aPartirDOu, int jusquOu); #endif // str.c #include #include char *str_left(char *i_str, int i_len) { if(i_len > strlen(i_str)) // Si la i_len > la longeur de la chaine return NULL; // alors c fini, renvoi NULL char *r_str = new char[i_len]; // Alloue la mémoire nécéssaire pour la nouvelle chaine int pos = 0; // position dans la chaine de départ do { r_str[pos] = i_str[pos]; // Rajoute le pos-ieme élément d'un tableau dans l'autre pos++; // puis incremente pos de 1 } while(pos < i_len); // Tant qu'on a pas la limite. r_str[pos] = 0; // Termine la chaine return r_str; } char *str_right(char *i_str, int i_len) { if(i_len > strlen(i_str)) // Si la i_len > la longeur de la chaine return NULL; // alors c fini, renvoi NULL char *r_str = new char[i_len]; // Alloue la mémoire nécéssaire pour la nouvelle chaine int pos = strlen(i_str) - i_len; // position dans la chaine de départ int npos = 0; // position dans la chaine d'arrivée do { r_str[npos] = i_str[pos]; pos++; npos++; } while(npos < i_len); // Tant qu'on a pas atteint i_len r_str[npos] = 0; return r_str; } char *str_mid(char *i_str, int i_len, int i_len2) { if((i_len + i_len2) > strlen(i_str)) // Si la i_len + i_len2 > la longeur de la chaine return NULL; // alors c fini, renvoi NULL char *buffer1 = new char[i_len + i_len2]; char *buffer2 = new char[i_len]; buffer1 = str_left(i_str, (i_len + i_len2)); buffer2 = str_right(buffer1, i_len2); delete buffer1; return buffer2; }