Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C]: Funzione strstr

  1. #1
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892

    [C]: Funzione strstr

    Ciao a tutti!
    Chi mi può dire qualè è il listato della funzione strstr della libreria string.h?

    cioè vorrei sapere come è stata scritta e non solo la sua firma...!

    Grazie in anticipo!
    Debian Sarge 3.01a
    Slackware 10.2

  2. #2

    Re: [C]: Funzione strstr

    Originariamente inviato da Fabiuz
    Chi mi può dire qualè è il listato della funzione strstr della libreria string.h?
    Quella che segue e` l'implementazione che si trova in dietlibc 0.29

    codice:
    #include <sys/types.h>
    #include <string.h>
    
    char *strstr(const char *haystack, const char *needle) {
      size_t nl=strlen(needle);
      size_t hl=strlen(haystack);
      int i;
      if (!nl) goto found;
      if (nl>hl) return 0;
      for (i=hl-nl+1; __likely(i); --i) {
        if (*haystack==*needle && !memcmp(haystack,needle,nl))
    found:
          return (char*)haystack;
        ++haystack;
      }
      return 0;
    }
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  3. #3
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    non cè un implementazione più semplice (adatta a studente universitario che non può usare goto e non sa tutte le librerie del C ?
    Debian Sarge 3.01a
    Slackware 10.2

  4. #4
    Originariamente inviato da Fabiuz
    non cè un implementazione più semplice (adatta a studente universitario che non può usare goto e non sa tutte le
    librerie del C ?
    Eliminare il goto non dovrebbe portare particolari problemi:
    codice:
    #include <sys/types.h>
    #include <string.h>
    
    char *strstr(const char *haystack, const char *needle) {
      size_t nl=strlen(needle);
      size_t hl=strlen(haystack);
      int i;
      if (!nl) return (char*)haystack;
      if (nl>hl) return 0;
      for (i=hl-nl+1; __likely(i); --i) {
        if (*haystack==*needle && !memcmp(haystack,needle,nl))
          return (char*)haystack;
        ++haystack;
      }
      return 0;
    }
    Eliminare le funzioni di libreria senza complicare in modo notevole il codice o riscriversele dubito sia fattibile...
    Rimane quel __likely che non avevo notato, credo sia roba interna di dietlibc
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.