Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31

    [C] trovare una parola in una stringa

    salve, provavo a fare questo programma che dice di cercare una stringa t in una stringa s, e di indicare l'indice da cui parte la parola trovata(t) in s.
    ovviamente non funziona -_- vi scrivo il tentativo vano che ho fatto se poi qualcuno vuole correggermelo o riscriverlo (in maniera semplice) ve ne saro' grato.

    codice:
     #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    char*cerca(char*t,char*s)
    { 
        int i;
        int conta_car=0;
        
        for(i=0; s[i]!='\0'; i++)
        { 
            if((s[i]==t[i])&&(s[i+1]==t[i+1]))
            { 
                conta_car++;
                
                return t;
            
            }
        }
       return -1;
    }
    
    int main()
    { 
        char s[30];
        char t[15];
        int i;
        
        printf("digita stringa: ");
        gets(s);
        
        printf("digita parola da cerca: ");
        gets(t);
        
        if(cerca(s,t)!=-1)
         { 
             puts("parola trovata,all'indice: %d", i);
         }
         
         getch();
    }

  2. #2
    prova così
    codice:
     #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    int cerca(char s[],char t[])
    { 
        int i;
        int conta_car=0;
        int lungt=strlen(t);  //trova la lunghezza di t
        int j=0;
        while(s[i])
        { 
            conta_car=i;
            while (s[i]==t[j])  //controlla carattere per carattere
                {
                      i++;
                      j++;
                }
            if (j==lungt)  //controlla se c'è tutta la stringa e non solo i primi 2 caratteri
                return conta_car;
            else
            {
                i=conta_car;   //devo azzerare sennò torna con un indice più avanti di quello che dovrebbe
                j=0;
            }
            i++;
            
        }
       return -1;
    }
    
    int main()
    { 
        char s[30];
        char t[15];
        
        printf("digita stringa: ");
        gets(s);
        printf("digita parola da cerca: ");
        gets(t);
        
        int indice_cercato=cerca(s,t); //lo salvi in una variabile così dopo non devi richiamare la funzione 2 volta
        if(indice_cercato!=-1)
         { 
             printf("parola trovata,all'indice: %d", indice_cercato);
         }
         getch();
    }
    i parametri della funzione li avevi messi invertiti, la funzione deve restituire un indice, cioè un numero. è più generale del tuo perché posso immettere stringhe più lunghe di 2 caratteri. se hai dubbi scrivi pure

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Grazieeee!!! si ora è molto più chiaro! allora mo provo vedermi meglio il tuo listato se ho qualche dubbio approfitterò della tua gentilezza e cortesia
    grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Metti sempre l'istruzione return 0 alla fine del corpo di main(), e per bloccare l'esecuzione non ricorrere a getch() (elimina pure conio.h che non serve) ma ad una più umana e portabile getchar().

    Originariamente inviato da hevan
    allora mo provo
    [OT]
    Attenzione alle influenze del tuo dialetto locale quando scrivi su un forum ;D
    [/OT]
    every day above ground is a good one

  5. #5
    io lo metto sempre return 0; era per non cambiare troppo il codice

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    ho provato il programma cosi riscritto non mi da errori pero' la parola non la trova o almeno non compare il messaggio sullo schermo o.o; ah poi volevo chiedere ma se tutta la funzione di ricerca la scrivevo dopo il main, scrivendo prima del main solo il prototipo della funzione, sarebbe stata la stessa cosa? (penso di si giusto?)




    ps

    pensavo che il "mo" fosse internazionale

  7. #7
    perché se hai messo return 0; va fuori subito, prova a mettere un system("pause"); appena prima del return 0;
    è la stessa cosa fare la dichiarazione e poi mettere la funzione sotto al main

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 © 2024 vBulletin Solutions, Inc. All rights reserved.