Visualizzazione dei risultati da 1 a 5 su 5

Discussione: problemi con strcmp

  1. #1

    problemi con strcmp

    Ciao a tutti, sto combattendo da stamattina con un problemino che mi da la funzione strcmp di php il codice è questo:

    Codice PHP:


    function findString($testo$parola)
    {

        
    $testo str_replace "," " " $testo);
        
    $testo str_replace "." " " $testo);
        
    $testo str_replace ";" " " $testo);
        
    $testo str_replace ":" " " $testo);
        
    $testo str_replace ")" " " $testo);
        
    $testo str_replace "(" " " $testo);
        
    $testo str_replace "-" " " $testo);
        
        
    $parola=trim($parola);
        
        
    $testo_split=explode  (" " $testo);
        
    $lungh_testocount($testo_split);
        
        
    /*echo "--------------------".$lungh_testo."----------------";
        
        echo "<font color=green>";
        for($i=0; $i < $lungh_testo; $i++) 
        {
            echo $testo_split[$i]." ".$i."
    ";
        }
        echo "</font>";*/
        
        
    $count=0;
        
        
    $arrary_parola=explode  (" " $parola);
        
    $lungh_parolacount($parola);
        
        
        
    //echo $testo."
    ";
        
            if(
    $lungh_parola==1)
            {
                for(
    $i=0; $i<$lungh_testo$i++) 
                {
                    //echo 
    $i."
    ";
                    
    $test="";
                    
                    
    $test=$testo_split[$i];
                    
                    echo 
    $parola."->".$test." ".$i." strcmp ".strcmp((string)$test,(string)$parola)."
    ";
                    if(strcmp(
    $parola,$testo_split[$i])==0)
                    {
                        echo "
    <font color=red>".$parola."->".$testo_split[$i]." ".$i."</font>
    ";
                        return true;
                    }
                }
            }
            else if(
    $lungh_parola>1)
            {
                
    $cont=0;
                while(
    $cont<$lungh_parola)
                {
                    for(
    $i=0; $i<$lungh_testo$i++)
                    {
                        //echo 
    $parola."->".$testo_split[$i]."
    ";
                        if(strcmp(
    $parola,$testo_split[$i])==0)
                        {
                            return true;
                        }
                    }
                
                
    $cont++;
                }
            }
        
        return false;    

    in poche parole è una funzione che mi cerca se dentro un testo vi sono delle parole, da premettere che non ho usato strpos perchè anche quella mi dava problemi(e tutto sommato volevo provare a fare io una funzione). ho fatto delle stampe, per esempio ho provato a cercare la parola "cessionario" nel testo e ho fatto delle stampre una porzione delle stampe è questa:

    cessionario->un 88 strcmp -1
    cessionario->ente 89 strcmp -1
    cessionario->locale 90 strcmp -1
    cessionario-> 91 strcmp -1
    cessionario->ma 92 strcmp -1
    cessionario->in 93 strcmp -1
    cessionario->cui 94 strcmp -1
    cessionario->il 95 strcmp -1
    cessionario->cessionario 96 strcmp -1
    cessionario-> 97 strcmp -1
    cessionario->diversamente 98 strcmp -1
    cessionario->da 99 strcmp -1
    cessionario->quanto 100 strcmp -1
    cessionario->previsto 101 strcmp -1
    cessionario->dal 102 strcmp -1

    come si può notare la riga in grassetto ha due stringhe ugualissime ma strcmp mi da comunque -1 anzichè 0.

    PERCHE'

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    evidentemente non sono uguali.

    sostiuisci
    Codice PHP:
    echo $parola."->".$test." ".$i." strcmp ".strcmp((string)$test,(string)$parola)."
    "

    con
    Codice PHP:
    echo $parola."->".$test." ".$i." strcmp ".strcmp((string)$test,(string)$parola)."
    "
    ;var_dump($test,$parola);var_dump(md5($test),md5($parola)); 
    e posta il risultato .



    poi qui:
    Codice PHP:
        $arrary_parola=explode  (" " $parola);
        
    $lungh_parolacount($parola); 
    suppongo volevi fare count($array_parola)

    e naturalmente, dovresti fare con strpos, strstr, espressioni regolari e qualsiasi altra cosa: sara' sicuramente piu' veloce di questo tuo codice

  3. #3
    Innanzi tutto grazie per la risposta, allora ho messo il codice che mi hai dato tu e come risultato ho:

    tring(13) "locale" string(11) "cessionario" string(32) "92e7d9805adccb475f2ee4598a12f5c6" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario-> 91 strcmp -1
    string(1) "" string(11) "cessionario" string(32) "93b885adfe0da089cdf634904fd59f71" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->ma 92 strcmp -1
    string(5) "ma" string(11) "cessionario" string(32) "672df0a849e4682f17412f325da04ea0" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->in 93 strcmp -1
    string(5) "in" string(11) "cessionario" string(32) "64d711f9959b8df7f1fea92283c055fa" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->cui 94 strcmp -1
    string(7) "cui" string(11) "cessionario" string(32) "92456def0b1d914c6b23ab35d9296100" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->il 95 strcmp -1
    string(5) "il" string(11) "cessionario" string(32) "cf60b811d7c86f5a4eb5155bfd4f48f8" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->cessionario 96 strcmp -1
    string(23) "cessionario" string(11) "cessionario" string(32) "26ff5839e920820406059726e0a7ebd9" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario-> 97 strcmp -1
    string(1) "" string(11) "cessionario" string(32) "93b885adfe0da089cdf634904fd59f71" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->diversamente 98 strcmp -1
    string(25) "diversamente" string(11) "cessionario" string(32) "87333b43adafd2525c598debd4f75db4" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->da 99 strcmp -1
    string(5) "da" string(11) "cessionario" string(32) "eaebc2cfda7f3646614387e3c9310dd0" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->quanto 100 strcmp -1
    string(13) "quanto" string(11) "cessionario" string(32) "c001f9b8fb8b36cf413379f4ae5b6056" string(32) "051b30b77c09992d0521150c876ebbc9" cessionario->previsto 101 strcmp -1

    io non so più che combinare, e come se dall'array estraesse non una stringa, ho provato a fare io una funzione per fare un confronto tra singole stringhe e come primo controllo guerdavo le lunghezze ed infatti la stringa estratta dall'array risultava lunga il doppio per esempio CESSIONARIO risulta lunga 23 e se faccio la stampa carattere per carattere stampa tra ogni carattere uno spazio, non ci capisco nulla, ma se invece lo stampo intera la stringa la stampa bene

    mha


    help me

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    string(23) "cessionario"
    string(11) "cessionario"
    string(32) "26ff5839e920820406059726e0a7ebd9"
    string(32) "051b30b77c09992d0521150c876ebbc9"
    vedi che non sono uguali?

    Fai questa magia nera:

    sostituisci:
    Codice PHP:
    $test=$testo_split[$i]; 
    con
    Codice PHP:
    $test preg_replace('/[^\\40-\\176]/','',$testo_split[$i]); 
    e si risolve tutto.

  5. #5

    Grazie mille


    grazie mille, ho provato ed ora funge tutto, ma mi sapresti dire perchè si comportava in quel modo, premetto che il testo sfasato lo recuperavo da un file word

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.