Problema con stringhe e getchar()

di il
1 risposte

Problema con stringhe e getchar()

Ciao a tutti, sto svolgendo un esercizio la cui consegna è:
Si scriva un programma C che acquisisca sequenze di caratteri da tastiera conclusa da un ritorno a capo. Il programma deve continuare ad acquisire sequenze fino alla ricezione di un EOF (Ctrl-z). Il programma deve quindi stampare le sequenze caratteri acquisiti
a. Sostituendo ad ogni sequenza “ch” il carattere ‘k’
b. Sostituendo le doppie con una sola ripetizione del carattere.
Ho scritto questo codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100

int main()
{
    char s[N][N];
    int i=0,j,k,n,c;

    printf("Inserire il testo, EOF per terminare: ");
    for(j=0;s[i][j-1]!=EOF;j++) //c!=EOF
    {
        //c=getchar();
        s[i][j]=getchar();

        if(s[i][j]=='\n') //c=='\n'
            i++;
    }

    n=i;

    for(i=0;i<n;i++)
    {
        for(j=0;j<strlen(s[i]);j++)
        {
            if(s[i][j]=='h' && s[i][j-1]=='c')
            {
                s[i][j-1]='k';

                for(k=0;k<(strlen(s[i])-j);k++)
                    s[i][j+k]=s[i][j+k+1];
            }

            if(s[i][j]==s[i][j-1])
            {
                for(k=0;k<(strlen(s[i])-j);k++)
                    s[i][j+k]=s[i][j+k+1];
            }
        }
    }

    for(i=0;i<n;i++)
    {
        printf("%s ",s[i]);
    }

    return 0;
}
il quale però funziona solo per la prima riga di caratteri inserita e non memorizza le righe seguenti, dalla seconda in poi. Secondo voi dove sbaglio? Grazie mille in anticipo!

1 Risposte

  • Re: Problema con stringhe e getchar()

    Spero possa esserti di aiuto... Ho cercato di rendere il codice piu' semplice possibile!
    Un ultima cosa su cui vorrei farti riflettere... Il testo dell'esercizio parla di effettuare la stampa con le semplificazioni richieste (ovvero ch --> k e doppioni rimossi) quindi io andrei in fase di stampa a fare queste semplificazioni e non direttamente sulla matrice acquisita... quella rimane cosi' com'e'!!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 100
    
    int main(int argc, char **Argv){
    
    	char s[N][N] = {'\0'};
    	char temp = '\0';		
    	int i, j = 0;	
    
    	printf("Programma per l'acquisizione di stringhe, un carattere per volta, sostituire ch con k e le doppie con una singola\n");
    
    	while((temp = getchar()) != EOF){
    
    		s[i][j++] = temp;
    		
    		if(temp == '\n'){ i++; j=0; }
    		
    	}
    
    	printf("Stampa caratteri acqusiti con opportune sostituzioni\n");
    
    	for(i=0; i<N; i++){
    
    		register int len = strlen(s[i]);
    		
    		for(j=0; j<len; j++){
    
    			if(s[i][j] == 'c' && s[i][j+1] == 'h'){ putchar('k'); j+=1; }
    			else if(s[i][j] == s[i][j+1]){ putchar(s[i][j]); j+=1; }
    			else putchar(s[i][j]);
    
    		}
    
    	}
    
    
    	exit(EXIT_SUCCESS);
    
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte