Informations sur: Manipulation sur chaine

Publié par kod128 le 16/08/2006

Description

Ce code permet de récupérer une partie d'une chaine. Soit a droite, soit a gauche, soit a un autre endroit. str_left et str_right fonctionnent comme les LEFT$ et RIGHT$ de QBASIC pour str_mid, je suis pas sur

Code source (langage cpp)

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
// 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 <iostream>
#include <string.h>
 
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;
}
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,041 s - Crédits - Stats
1 connecté