Puntatore a stringa

di il
12 risposte

Puntatore a stringa

Salve a tutti... ho una stringa (char frase[100]).... ora io devo vedere tra le parole di cui è composta la mia frase quale di queste è la più corta.... io vorrei usare un puntatore per puntare ogni parola della frase e con un ciclo controllare quale è la piu corta solo che non so come inizializzare il puntatore per far si che punti ad una intera parola.... consigli???
grazie in anticipo

12 Risposte

  • Re: Puntatore a stringa

    Ti suggerisco di fare un ciclo che scorre tutta la stringa, carattere per carattere, e gestisce una macchina a "stati":
    - parti dallo stato 0 in cui ricerchi l'inizio di una parola, quando trovi un carattere diverso da spazio, virgola... allora ti salvi il puntatore all'inizio della stringa e passi nello stato 1
    - nello stato 1 tieni conteggiato la lunghezza della parola, finchè non trovi uno spazio, una virgola... e ritorni nello stato 0
    Come primo step potresti stampare a video le varie parole trovate (quando passi da stato 1 a stato 0), vedrai che dopo ti verrà facile passare allo step successivo, ovvero tenerti traccia di volta in volta della parola più corta fino a quel momento.
  • Re: Puntatore a stringa

    Usa la funzione

    strtok

    per individuare tutte le parole della frase in un ciclo.

    Nel ciclo copia la parola corrente in una stringa temporanea tenendo conto della lunghezza minima ottenuta.
  • Re: Puntatore a stringa

    oregon ha scritto:


    Usa la funzione

    strtok

    per individuare tutte le parole della frase in un ciclo.

    Nel ciclo copia la parola corrente in una stringa temporanea tenendo conto della lunghezza minima ottenuta.
    scusa il ritardo... Allora ho usato strtok..... la stringa che ho tokenizzato è char copia[]....
    ora se scrivo strlen(copia) mi da la lunghezza della prima parola della mia stringa....però se scrivo
    strlen(copia+1) mi da il 2o carattere della 2a parola
  • Re: Puntatore a stringa

    Molto probabilmente hai sbagliato ad utilizzare la strtok().
    Prova a vedere qualche esempio, come
  • Re: Puntatore a stringa

    Appunto ... che codice hai scritto?
  • Re: Puntatore a stringa

    oregon ha scritto:


    Appunto ... che codice hai scritto?
    ecco la tokenizzazione
    
    
    char frase[100];
    cin.getline(frase,100);
        
    
    char *ptr;
        ptr=strtok(frase, " ");
        while(ptr != NULL)
        {
            ptr=strtok(NULL, " ");
        }
    
    
    
    
  • Re: Puntatore a stringa

    la stringa che ho tokenizzato è char copia[]....
    ora se scrivo strlen(copia) mi da la lunghezza della prima parola della mia stringa....però se scrivo
    strlen(copia+1) mi da il 2o carattere della 2a parola
    magari se posti il codice in cui hai problemi qualcuno ti può aiutare
  • Re: Puntatore a stringa

    Va bene il codice ma il problema qual è? Questa è la parte che suddivide in parole ma manca il resto, no? Dove sta la strlen di cui parlavi? A cosa ti serve? Hai riletto quello che ti ho indicato come soluzione?
  • Re: Puntatore a stringa

    oregon ha scritto:


    Va bene il codice ma il problema qual è? Questa è la parte che suddivide in parole ma manca il resto, no? Dove sta la strlen di cui parlavi? A cosa ti serve? Hai riletto quello che ti ho indicato come soluzione?
    
    
         int cont2=0;
         int min=strlen(frase);
    
         for (int x=min+1;x<strlen(frase);x++)
            {
               if(frase[x] != '\0')
               cont2++;
               if(frase[x] == '\0' && cont2 <min)
               {
               min=cont2;
               cont2=0;
               }
            }
    
    allora ho pensato di salvarmi la lunghezza della prima parola nella variabile min e poi scorrere la stringa tokenizzata ....aumento cont2 finchè non trovo il carattere terminatore, se cont2 è minore di min e trova il terminatore allora min=cont2... però non mi funziona
  • Re: Puntatore a stringa

    Ma scusa, dove stai utilizzando strtok?
    Perchè non parti dall'esempio che ti ho linkato in un post precedente?
  • Re: Puntatore a stringa

    Homeni ha scritto:


    oregon ha scritto:


    Va bene il codice ma il problema qual è? Questa è la parte che suddivide in parole ma manca il resto, no? Dove sta la strlen di cui parlavi? A cosa ti serve? Hai riletto quello che ti ho indicato come soluzione?
    
    
         int cont2=0;
         int min=strlen(frase);
    
         for (int x=min+1;x<strlen(frase);x++)
            {
               if(frase[x] != '\0')
               cont2++;
               if(frase[x] == '\0' && cont2 <min)
               {
               min=cont2;
               cont2=0;
               }
            }
    
    allora ho pensato di salvarmi la lunghezza della prima parola nella variabile min e poi scorrere la stringa tokenizzata ....aumento cont2 finchè non trovo il carattere terminatore, se cont2 è minore di min e trova il terminatore allora min=cont2... però non mi funziona

    ho risolto da solo...poi v posto il codice per sicurezza
  • Re: Puntatore a stringa

    Beh ... che dire ...
Devi accedere o registrarti per scrivere nel forum
12 risposte