Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, et autres ressources pour la rubrique C.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/10/2006, 17h34   #1
carreau
Futur Membre du Club
 
Inscription : juillet 2003
Messages : 71
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 71
Points : 19
Points : 19
Par défaut Manipulation de chaînes de caractères

à partir des sources même de ce site (§8 http://c.developpez.com/sources/c/?page=sommaire), des fonctions de manipulation de chaînes de caractères :

le code source original de remplacement d'une sous-chaîne (vieux) par une autre (nouveau) dans une chaîne de caractères (source) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int RemplacerFragment (char *source, const char *vieux, const char *nouveau)
{
  char *original = source;
  char temp[4096];
  int ancienne_long = strlen (vieux);
  int i, j, k, place = -1;
  for (i = 0; source[i] && (place == -1); ++i)
    for (j = i, k = 0; source[j] == vieux[k]; j++, k++)
      if (!vieux[k+1])
        place = i;
  if (place != -1) 
  {
    for (j=0; j<place; j++)
      temp[j] = source[j];
    for (i=0; nouveau[i]; i++, j++)
      temp[j] = nouveau[i];
    for (k = place + ancienne_long; source[k]; k++, j++)
      temp[j] = source[k];
    temp[j] = 0;
    for (i=0; source[i] = temp[i]; i++)
      ;
  }
  return place;
}
une digression du code précédent de remplacement d'une sous-chaîne (vieux) dans une chaîne (source) par une nouvelle sous-chaîne (nouveau) si cette sous-chaîne est encadrée par une chaîne de séparation (separateur)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int RemplacerFragment (char *source, const char *vieux, const char *nouveau, const char *separateur)
{
  char *original = source;
  char temp[4096];
  int ancienne_long = strlen (vieux);
  int i, j, k, place = -1;
  for (i = 0; source[i] && (place == -1); ++i)
    for (j = i, k = 0; source[j] == vieux[k]; j++, k++)
      if (!vieux[k+1] && (i==0 || source[i-1]==*separateur) && (source[j+1]== *separateur || source[j+1]=='\n'))
        place = i;
  if (place != -1) 
  {
    for (j=0; j<place; j++)
      temp[j] = source[j];
    for (i=0; nouveau[i]; i++, j++)
      temp[j] = nouveau[i];
    for (k = place + ancienne_long; source[k]; k++, j++)
      temp[j] = source[k];
    temp[j] = 0;
    for (i=0; source[i] = temp[i]; i++)
      ;
  }
  return place;
}
une fonction qui permet d'ôter la fin de chaîne d'une chaîne (source) à partir de la position d'une sous-chaîne (vieux)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int RetirerCommentaire (char *source, const char *vieux)
{
  char *original = source;
  char temp[4096];
  int ancienne_long = strlen (vieux);
  int i, j, k, place = -1;
  for (i = 0; source[i] && (place == -1); ++i)
    for (j = i, k = 0; source[j] == vieux[k]; j++, k++)
      if (!vieux[k+1])
        place = i;
  if (place != -1)
  {
    for (j=0; j<place; j++)
      temp[j] = source[j];
    temp[j] = 0;
    for (i=0; source[i] = temp[i]; i++)
      ;
  }
  return place;
}
Une fonction qui permet de remplacer une sous-chaîne non précisée par une nouvelle (nouveau) si elle est encadrée par deux sous-chaînes (vieux1 et vieux 2)
Code :
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
int RetirerCommentaire (char *source, const char *vieux1, const char *nouveau, const char *vieux2)
{
  char *original = source;
  char temp[4096];
  int ancienne_long = strlen (vieux1);
  int i = 0, j = 0, k = 0, place1 = -1, place2 = -1;
  for (i = 0; source[i] && (place1 == -1); ++i)
    for (j = i, k = 0; source[j] == vieux1[k]; j++, k++)
      if (!vieux1[k+1] )
        place1 = i;
  for (i = j; source[i] && (place2 == -1); ++i)
    for (j = i, k = 0; source[j] == vieux2[k]; j++, k++)
      if (!vieux2[k+1] )
        place2 = j;
  if (place1 != -1 && place2 != -1) 
  {
    for (j=0; j<place1; j++)
      temp[j] = source[j];
    for (i=0; nouveau[i]; i++, j++)
      temp[j] = nouveau[i];
    for (k = ++place2 ; source[k]; k++, j++)
      temp[j] = source[k];
    temp[j] = 0;
    for (i=0; source[i] = temp[i]; i++)
      ;
  }
  return place1 != -1 && place2 != -1 ;
}
carreau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 10h46   #2
gege2061
Rédacteur
 
Avatar de gege2061
 
Inscription : juin 2004
Messages : 5 850
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : juin 2004
Messages : 5 850
Points : 10 535
Points : 10 535
Je vais regarder ça à tête reposée.

pour ton aide.
gege2061 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h52.


 
 
 
 
Partenaires

Hébergement Web