Sous-séquence croissante

Signaler
Messages postés
2
Date d'inscription
lundi 23 mars 2009
Statut
Membre
Dernière intervention
23 mars 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
débutante!
salut je cherche un pseudo code ou bien une petite idée de comment procéder  pour la recherche d'une plus longue sous séquence croissante dans une chaine de caractères quelconque. merci d'avance

2 réponses

Messages postés
2
Date d'inscription
lundi 23 mars 2009
Statut
Membre
Dernière intervention
23 mars 2009

débutante!
pour l'instant mon idée est de comparer le premier caractère au suivant ainsi de suite juska la fin mais après je conné pas la fonction ki permé de comparé 2 caractères. toutes les idées sont les bienvenues !! merci
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Petit truc vite fait, semble aller.

char szTEST[] = "abczghijkfg";

// Retourne 0 si *src est chaine vide et **pres non attribué.
// SINON:
// pres = adresse de la sous chaine et retourne longueur
DWORD SousChaineCroissante(char *src, char **pres)
{
  char *deb, *c, preced, curr;
  DWORD n;
  DWORD count = 0;
  c = src;
  deb = src;
  preced = src[0];
  if(!preced) goto souschaineEXIT;
  preced++;
nextSOUSCHAINE:
  curr = *c;
  if(!curr) goto noCROISS;
  if(curr != preced) goto noCROISS;
  c++;
  if(++preced) goto nextSOUSCHAINE;
noCROISS:
  n = c - deb;
  if(n > count) {
    *pres = deb;
    count = n;
  }
  if(curr) {
    deb = c;
    preced = curr + 1;
    c++;
    goto nextSOUSCHAINE;
  }
souschaineEXIT:
  return count;
}

void Tester(VOID)
{
  char buf[200], szcount[16];
  char *p;
  DWORD n;
 
  strcpy(buf, szTEST);
  n = SousChaineCroissante(buf, &p);
  if(!n) return;
 
  p[n] = 0;
  ultoa(n, szcount, 10);
  MessageBox(0, p, szcount, 0);
}

ciao...
BruNews, MVP VC++