Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    14

    [C] Stringhe!!!!

    Devo inserire in un vettore una frase le cui parole sono separate da uno o più spazi. Inserire le parole, una per riga, in una matrice char e stamparla.
    Ad esempio, se la frase è “mi piace l’estate” la matrice sarà:
    mi
    piace
    l’estate

    Aiutooo mi da "ha smesso di funzionare" etc

    codice:
    #include <stdlib.h> 
    #include <stdio.h>  
    int insv(char vet[100],int riemp,int r); 
    void insm(char vet[100],char mat[100][100],int r,int riemp); 
    void stampa(char mat[100][100],int r);   
     int main() 
    {     char v[100], m [100][100];     
    int r;     
    int riemp;                  
    r=insv(v,riemp,r);     
    insm(v,m,r,riemp);    
     stampa(m,r);     
    return (0);     
    system("pause"); 
    } 
    int insv(char vet[100],int riemp,int r)
    {          printf("inserisci frase ");    
    scanf("%[^\n]",vet);    
    while(vet[riemp]=='\n')
    {       if(vet[riemp]==' ')
    {                 r++;                 }                 
    riemp++; } 
    return r; }   
    void  insm(char vet[100],char mat[100][100],int r,int riemp)
    {      
    int i,k;      k=0;      
    for(i=0;i<=r;i++)
    {                       
    while((vet[k]!=' ')||(vet[k]!='\0'))
    {            mat[i] [k]=vet[k];                                       
    k++;                                       
    } 
    }                                                 
     }
    void stampa(char mat[100][100],int r){     
     int i;           
     for(i=0;i<r;i++)      
    printf("%s\n", &mat[i][0]);      
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Il codice è abbastanza incomprensibile: è inutile usare il tag CODE se il codice non è indentato in partenza...

    Ad ogni modo: quello che devi fare un esercizio scolastico o qualcosa per i cavoli tuoi? Se non è un esercizio scolastico potresti usare la funzione strtok per spezzettare una stringa, così ti semplifichi un bel po' la vita. Rimettere insieme i pezzi poi non è difficile...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Non molto tempo fa un altro utente aveva lo stesso problema, del cuale io gli fornii una soluzione. Puoi prendere spunto da quello. Cerca bene tra i post.

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Consapevole del fatto che esiste la strtok e la funzione già fatta di simo,ho provato a farlo come esercizio.
    Ecco qua le dichiarazioni delle variabili:
    codice:
    char **p;
    char *t,*stringa;
    int k=1,j=0,i=0;
    Una volta presa la stringa in ingresso allocando memoria sul puntatore stringa,e facendo puntare t a p[0],che sarà una matrice di caratteri,o meglio un array di stringhe con dimensioni variabili,alloco memoria per il primo array di stringhe e per il primo carattere:
    codice:
    p=(char**)malloc(sizeof(char*));
    t=(char*)malloc(sizeof(char));
    Poi parte il ciclo,alla fine del ciclo ogni puntatore a stringa p[i] punterà all' indirizzo di una stringa,e la dimensione massima sarà j (p[j-1]).
    codice:
    do
        {
            if(stringa[i]!=' ')
            {
                t=(char*)realloc(t,k*sizeof(char));
                t[k-1]=stringa[i];
                k++;
            }
            else
            {
                k++;
                t=(char*)realloc(t,(k+1)*sizeof(char));
                j++;
                p=(char**)realloc(p,j*sizeof(char*));
                t[k-1]='\0';
                t=p[j];
                t=(char*)malloc(sizeof(char));
                k=1;
            }
            i++;
        }while(stringa[i-1]);
    Dopo ovviamente tutta la memoria allocata su p e su t va liberata.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da ramy89
    Consapevole del fatto che esiste la strtok e la funzione già fatta di simo
    Io la postai solamente, a dir la verità un programma intero, ma non lo scrissi io.

  6. #6
    Originariamente inviato da simo_85
    ...del cuale io gli fornii una soluzione...
    AAAAAAHHHHHHHH

    Sicuramente è un errore di battitura..

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286

    Re: [C] Stringhe!!!!

    Originariamente inviato da artmar
    Devo inserire in un vettore una frase le cui parole sono separate da uno o più spazi. Inserire le parole, una per riga, in una matrice char e stamparla.
    Ad esempio, se la frase è “mi piace l’estate” la matrice sarà:
    mi
    piace
    l’estate
    Se il compito è quello di separare le parole per linea, è sufficiente sostiruire al carattere "Spazio", il carattere "Nuova linea".

    codice:
    void Separa(char *str)
    {
    	while ( *str != '\0' )
    	{
    		if (*str == '\x20') 
    			*str = '\n';
    		str++;
    	}
    }
    
    
    // Alla chiamata:
    char *str = "mi piace l’estate";
    Separa(str);
    Il codice l'ho scritto direttamente sul form del forum e non è dunque testato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466

    Re: Re: [C] Stringhe!!!!

    Originariamente inviato da Paulin
    Se il compito è quello di separare le parole per linea
    No, rileggi bene.

  9. #9

    Re: Re: Re: [C] Stringhe!!!!

    Originariamente inviato da simo_85
    No, rileggi bene.
    Concordo, in più devono essere prese in considerazione eventuali situazioni in cui il numero di spazi dopo una parola è maggiore di 1, detto n; con la precedente soluzione si otterrebbero n nuove linee, ovviamente vuote.


    Buone Feste

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286

    Re: Re: Re: [C] Stringhe!!!!

    Originariamente inviato da simo_85
    No, rileggi bene.
    In effetti, oltre a farmi prendere dalla mia solita fretta, sono stato un po' troppo distratto.

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.