Sous-séquence croissante

myabg Messages postés 2 Date d'inscription lundi 23 mars 2009 Statut Membre Dernière intervention 23 mars 2009 - 23 mars 2009 à 01:57
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 23 mars 2009 à 13:02
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

myabg Messages postés 2 Date d'inscription lundi 23 mars 2009 Statut Membre Dernière intervention 23 mars 2009
23 mars 2009 à 02:00
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mars 2009 à 13:02
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++
0
Rejoignez-nous