Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 34
  1. #11
    Utente bannato
    Registrato dal
    Jul 2001
    Messaggi
    559
    Originariamente inviato da andrea_NET-_DSL
    ecco prova



    ps se la traccia del problema è quella che hai scritto tu mi sembra troppo avanzato per chi inizia
    mi sono scordato di dirti che il mio bagaglio di conoscenze comprende:
    for,while,if-else,getchar(),putchar(),stdio.h...

    quindi non so proprio perchè abbiano messo un programma così difficile. cmq mi da un errore qui:
    codice:
      if ( stringa[i] == '\t' )
           stringa[i]=' ';

  2. #12
    Originariamente inviato da ascatem
    mi sono scordato di dirti che il mio bagaglio di conoscenze comprende:
    for,while,if-else,getchar(),putchar(),stdio.h...

    quindi non so proprio perchè abbiano messo un programma così difficile. cmq mi da un errore qui:
    codice:
      if ( stringa[i] == '\t' )
           stringa[i]=' ';
    ho editato il codice riprova copiandolo-incollando ex-novo

    In ogni caso ormai ci dobbiamo arrivare ad una conclusione:vorrà dire che apprenderemo cose nuove entrambi....non si lasciano i lavori a metà :gren:


    ps mi ero dimenticato un ; sulla riga precedente x la cronaca
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  3. #13
    Utente bannato
    Registrato dal
    Jul 2001
    Messaggi
    559
    grazie, sei un vero amico

    si, è verp.. si imparano sempre cose nuove :P

  4. #14
    Originariamente inviato da ascatem
    grazie, sei un vero amico

    si, è verp.. si imparano sempre cose nuove :P
    si

    funge come tu volevi?

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #15
    Utente bannato
    Registrato dal
    Jul 2001
    Messaggi
    559
    Originariamente inviato da andrea_NET-_DSL
    si

    funge come tu volevi?

    non avevo avuto tempo di guardare il programma...

    fa come l'altro.. tira via solo i tab ma gli spazi in + rimangono gli stessi

    questa sera sento se qualche mio amico ci è riuscito.


    grazie, cmq!!

  6. #16

    Re: [c] 2 domande.

    Originariamente inviato da ascatem
    2)non riesco a rsolvere il seguente problema: costruire un programma che sostituisca a TAB e a uno o più spazi un singolo spazio(es:"ciao mondo"=="ciao mondo" )

    ecco qua:
    codice:
    #include <stdio.h>
    
    void sposta(char * s);
    
    int main()  {
    	char stringa[100], *str;
    	printf("\nInserisci la stringa:\n");
    	fgets(stringa, 99, stdin);
    
    	// sostituisco i tab con degli spazi "normali"
    	for(str=stringa; *str; str++)
    		if (*str=='\t')	*str=32;
    
    	str = stringa;
    	while(*str)  {
    		if (*str==' ' && *(str+1)==' ')
    			sposta(str);
    		else	str++;
    	}
    	printf("\nStringa risultante:\n");
    	printf(stringa);
    	getch();
    }
    
    // fa scalare i caratteri della parte rimanente della stringa
    void sposta(char *s)  {
    	for( ; *s; s++)
    		*s = *(s+1);
    }

    Ho usato i puntatori, ma se ti scocciano non esitare a dirmelo ché lo modifico subito il prog!!

    Se qualcosa non ti è chiara sono qua a tua disposizione

    ciao!


  7. #17
    Originariamente inviato da ascatem
    non avevo avuto tempo di guardare il programma...

    fa come l'altro.. tira via solo i tab ma gli spazi in + rimangono gli stessi

    questa sera sento se qualche mio amico ci è riuscito.


    grazie, cmq!!
    versione modificata e commentata
    compila questo ed eseguilo dando come stringa ad es

    prova prova2

    (tra le due stringhe ci sono 2 spazi, anche se qua sul forum non sembra )

    posta uno screen-shot dell'output


    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    char* rimuovi_doppi_spazi(int ,char *);
    
    int main(){
    printf("\nInserisci la stringa di testo da processare\n");
    char *stringa;
    stringa = (char *) malloc (100*sizeof(char));
    gets(stringa);
    
    int i;
    for(i=0;i<strlen(stringa);i++){
    
    /* se trovo due spazi consecutivi richiamo la funzione che ne sostituisce uno */ 
    if ( stringa[i] == ' ' && stringa[i+1] == ' ')
           stringa = rimuovi_doppi_spazi(i+1,stringa);
    
    /* se trovo un tab sostituisco con uno spazio */ 
     if ( stringa[i] == '\t' )
           stringa[i]=' ';
    }
    
    printf("\nSTRINGA senza TAB e/o doppi spazi(se presenti)\n\n");
    puts(stringa);
     
    system("pause");
    }
    
    
    char* rimuovi_doppi_spazi(int inizio,char *str){
    int j,i;
    char *tmp;
    tmp=(char *)malloc( strlen(str)*sizeof(char) );
    
    for(j=inizio+2,i=0;j<=strlen(str);j++,i++)
      tmp[i]=str[j];
     
    return tmp;
    }
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  8. #18
    scusa ascatem
    mi rendo conto che quello di prima era un po' criptico e se non hai fatto i puntatori non puoi capirci niente

    Te ne posto uno nuovo che non fa uso dei puntatori e te lo commento per bene

    codice:
    #include <stdio.h>
    
    void sposta(char * s);
    
    int main()  {
    	char stringa[100];
    	int i;
    	printf("\nInserisci la stringa:\n");
    	fgets(stringa, 99, stdin);
    
    	// sostituisco i tab con degli spazi "normali"
    	for(i=0; stringa[i]!=0; i++)
    		if (stringa[i]=='\t')	stringa[i]=' ';
    
    	for (i=0; stringa[i]!=0;)  {
    		// se trovo sue spazi consecutivi...
    		if (stringa[i]==' ' && stringa[i+1]==' ')
    			// ...chiamo la sposta() passandole l'indirizzo
    			// del carattere corrente (cioè il primo dei
    			// due spazi consecutivi)
    			sposta(&stringa[i]);
    			// Manteniamo comunque la posizione a questo punto
    			// della stringa senza avanzare perché dobbiamo
    			// prima vedere se, dopo aver fatto scalare i caratteri,
    			// c'è ancora un altro spazio.
    		// Se invece non abbiamo incontrato spazi, possiamo andare
    		// avanti e processare il resto della stringa
    		else	i++;
    	}
    	printf("\nStringa risultante:\n");
    	printf(stringa);
    	getch();
    }
    
    
    // In pratica, fa scalare i caratteri della parte rimanente della stringa,
    // sovrascrivendo al primo spazio il secondo (ne taglia così uno), 
    // poi sovrascrive al secondo spazio il carattere successivo e così via
    // fino a raggiungere la fine della stringa
    void sposta(char *s)  {
    	int i=0;
    	for( ; s[i]; i++)	s[i] = s[i+1];
    }
    Forse è un po' difficile per chi è alle prime armi
    cmq spero di essermi spiegato bene

    Se vuoi chiarimenti chiedi pure
    Ciao!!


  9. #19
    versione ancora migliorata e ottimizzata della precedente...

    codice:
    #include <stdio.h>
    #include <string.h> // strlen()
    #include <stdlib.h> // malloc() free() system() fgets()
    
    
    char* rimuovi_doppi_spazi(int ,char *);
    
    int main(){
    printf("\nInserisci la stringa di testo da processare\n");
    char *stringa;
    stringa = (char *) malloc (100*sizeof(char));
    fgets(stringa,99,stdin);
    
    int i;
    for(i=0;i<strlen(stringa);i++){
    
    /* se trovo due spazi consecutivi richiamo la funzione che ne sostituisce uno */ 
    if ( stringa[i] == ' ' && stringa[i+1] == ' ')
           stringa = rimuovi_doppi_spazi(i+1,stringa);
    
    /* se trovo un tab sostituisco con uno spazio */ 
     if ( stringa[i] == '\t' )
           stringa[i]=' ';
    }
    
    printf("\nSTRINGA senza TAB e/o doppi spazi(se presenti)\n\n");
    puts(stringa);
    
    free(stringa); //libreo la memoria allocata per la stringa con malloc 
    system("pause");
    }
    
    
    char* rimuovi_doppi_spazi(int inizio,char *str){
    int j,i;
    char *tmp;
    tmp=(char *)malloc( strlen(str)*sizeof(char) );
    
    /*j=inizio+2 perchè inizio a concatenare la stringa lasciando uno spazio dei due trovati */
    for(j=inizio+2;j<=strlen(str);j++)
      tmp[j]=str[j];
     
    return tmp;
    }
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  10. #20
    Utente bannato
    Registrato dal
    Jul 2001
    Messaggi
    559
    non ho ancora prvato i vostri, cmq siete dei veri amici!!!!
    vi metto subito tra i preferiti, così se ho bisogno so chi chiamare, grazie!!!!!!!!!!!!!!!!!!11

    mq io sono riuscito a farlo così:
    codice:
    #include <stdio.h>
    main()
    {
    long unsigned int c, ns;
    
      while((c=getchar())!= EOF)
       {if(c!=' ' && c!='\t')
            {  ns=0;
               putchar(c);
             }
           else if(c=='\t')
                 printf("");
                  else if(c==' ' && ns==0)
                       {
                         printf(" ");
                         ++ns;
                         }
                         else if (ns>0)
                                {
                                 ++ns;
                                  printf("");
                                  }
          }    
    }

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