Trasformare una stringa

di il
102 risposte

102 Risposte - Pagina 3

  • Re: Trasformare una stringa

    Getchar() l' avevo messa per l' input dei caratteri, è sbagliato così, se una stringa è un argomento della funzione non può essere inserita con getchar?
    La dimensione minima di s è quella di t, la dimensione massima di s penso possa essere un numero > 10
  • Re: Trasformare una stringa

    SuperManPC ha scritto:


    Getchar() l' avevo messa per l' input dei caratteri, è sbagliato così, se una stringa è un argomento della funzione non può essere inserita con getchar?
    La dimensione minima di s è quella di t, la dimensione massima di s penso possa essere un numero > 10
    Ma scusa se devi copiare una stringa da un array ad un altro la chiedi in input da stdin?!

    Nel main leggi la stringa da stdin. La funzione deve solo copiarla nell’altro array modificandola adeguatamente.
  • Re: Trasformare una stringa

    Ok, scusa se non capisco, con stdio ti riferisci alla libreria standard vero?
  • Re: Trasformare una stringa

    _Achille ha scritto:


    SuperManPC ha scritto:


    Getchar() l' avevo messa per l' input dei caratteri, è sbagliato così, se una stringa è un argomento della funzione non può essere inserita con getchar?
    La dimensione minima di s è quella di t, la dimensione massima di s penso possa essere un numero > 10
    Ma scusa se devi copiare una stringa da un array ad un altro la chiedi in input da stdio?!

    Nel main leggi la stringa da stdio. La funzione deve solo copiarla nell’altro array modificandola adeguatamente.
    Quindi nel main uso getchar?
  • Re: Trasformare una stringa

    Sì, nel main.

    E passi la stringa alla funzione ...
  • Re: Trasformare una stringa

    Grazie per la risposta
  • Re: Trasformare una stringa

    SuperManPC ha scritto:


    
    #include <stdio.h>
    
    int strlen_fatta_in_casa(char str[]);
    
    void main()
    {
    	printf("%d", strlen_fatta_in_casa("stringa"));
    }
    
    int strlen_fatta_in_casa(char str[])
    {
    	int i;
    	for (i = 0; str[i] != '\0'; ++i)
    		;
    	return i;
    }
    
    Bene!

    SuperManPC ha scritto:


    Getchar() l' avevo messa per l' input dei caratteri, è sbagliato così, se una stringa è un argomento della funzione non può essere inserita con getchar?
    Volendo si può anche fare, ma nel codice che hai postato all'inizio c'è troppa carne al fuoco.
    In ogni caso se proprio ci tieni prova ad implementare la seguente funzione
    void read_string(char s[], unsigned int dim);
    utilizzando getchar() ed EOF.
    dim è la dimensione dell'array s.
    Lanciandola col seguente main:
    int main()
    {
        char s[10];
        printf("inserisci stringa:\n");
        read_string(s, 10);
        printf("stringa letta:\n");
        printf("%s\n\nlunghezza stringa:%d\n", s, strlen(s));
    }
    dovrebbe stampare qualcosa del genere
    inserisci stringa:
    a b
    0
    
    123456
    stringa letta:
    a b
    0
    
    12
    
    lunghezza stringa:9
    
    Process returned 0 (0x0)   execution time : 28.974 s
    Press any key to continue.
    
    inserisci stringa:
     0
    12
    ^Z
    stringa letta:
     0
    12
    
    lunghezza stringa:5
    
    Process returned 0 (0x0)   execution time : 17.713 s
    Press any key to continue.

    SuperManPC ha scritto:


    La dimensione minima di s è quella di t, la dimensione massima di s penso possa essere un numero > 10
    Ovviamente sarà >10, ma sapresti dirmi il numero preciso? Ragionaci!
  • Re: Trasformare una stringa

    Ma questa read_string cos'è che deve fare di preciso?
    
    void read_string(char s[], unsigned int dim)
    {
    	int i;
    	for (i = 0; i < dim && (s[i] = getchar()) != EOF; ++i)
    	{
    		switch (s[i])
    		{
    		case '\t': s[i] = "\\t";
    			break;
    		case '\n': s[i] = "\\n";
    			break;
    		default: s[i] = s[i];
    			break;
    		}
    	}
    }
    
    Tipo così?
  • Re: Trasformare una stringa

    Deve solo leggere una stringa da tastiera e salvarla nell'array s di dimensione dim. La parte relativa allo switch non c'entra niente qui, il compito di ottenere la stringa modificata lascialo alla funzione escape().
    Quindi fin qui va bene
    void read_string(char s[], unsigned int dim)
    {
    	int i;
    	for(i = 0; i < dim && (s[i] = getchar()) != EOF; ++i)
    	...
    }
    ora però devi rendere s una stringa... ricordi la differenza tra un semplice array di caratteri e una stringa?

    P.S.

    Nippolo ha scritto:


    Ovviamente sarà >10, ma sapresti dirmi il numero preciso? Ragionaci!
  • Re: Trasformare una stringa

    Ah ok, si ricordo la differenza, metto il terminatore
  • Re: Trasformare una stringa

    Nippolo ha scritto:


    Deve solo leggere una stringa da tastiera e salvarla nell'array s di dimensione dim. La parte relativa allo switch non c'entra niente qui, il compito di ottenere la stringa modificata lascialo alla funzione escape().
    Quindi fin qui va bene
    void read_string(char s[], unsigned int dim)
    {
    	int i;
    	for(i = 0; i < dim && (s[i] = getchar()) != EOF; ++i)
    	...
    }
    ora però devi rendere s una stringa... ricordi la differenza tra un semplice array di caratteri e una stringa?

    P.S.

    Nippolo ha scritto:


    Ovviamente sarà >10, ma sapresti dirmi il numero preciso? Ragionaci!
    Ma s è un char non int, come fa a contenere EOF?
  • Re: Trasformare una stringa

    Così?
    
    void read_string(char s[], unsigned int dim)
    {
    	int i;
    	for (i = 0; i < dim && (s[i] = getchar()) != EOF; ++i)
    		;
    	s[i] = '\0';
    }
    
  • Re: Trasformare una stringa

    SuperManPC ha scritto:


    Ma s è un char non int, come fa a contenere EOF?
    Hai ragione, il corretto funzionamento in tal caso dipenderebbe dal fatto che il tipo char sia di default signed o unsigned.
    Quindi aggiusta il codice utilizzando una variabile intera di "appoggio".

    SuperManPC ha scritto:


    Così?
    i < dim - 1
    Altrimenti il carattere \0 lo vai a scrivere in zone di memoria che non competono all'array s.

    Aspetto ancora una risposta circa la massima dimensione di s!
  • Re: Trasformare una stringa

    Non ho idea di come si faccia per risolvere con l' intero al posto di char
  • Re: Trasformare una stringa

    SuperManPC ha scritto:


    Non ho idea di come si faccia per risolvere con l' intero al posto di char e neanche della dim massima di s...
Devi accedere o registrarti per scrivere nel forum
102 risposte