Re: Trasformare una sequenza di controllo

di il
32 risposte

32 Risposte - Pagina 2

  • Re: Re: Trasformare una sequenza di controllo

    Come li metti te i case di switch?
  • Re: Re: Trasformare una sequenza di controllo

    Devi provare tu a risolvere i problemi altrimenti non impari mai.
  • Re: Re: Trasformare una sequenza di controllo

    Prova a scrivere ninna\tnanna\nciao
    io lo avevo provato
    E se non mi dici niente sono costretto a provare di tutto
  • Re: Re: Trasformare una sequenza di controllo

    [CODE] switch (t[i]) { case '\\': case 't': s[j++] = '\t'; break; case 'n': s[j++] = '\n'; break; default: s[j++] = t[i]; break; } Sai spiegare come si comporta quando la stringa è “anatrocco\\lo” ad esempio?

    Inoltre strlen ritorna la lunghezza della stringa non considerando lo '\0'. Se metti -1 ti mangi un carattere. È dallo thread precedente che ti viene detto e ancora ci sta il -1…
  • Re: Re: Trasformare una sequenza di controllo

    La n viene presa per un newline, la t per una tabulazione e \\ per una tabulazione più spazio forse
  • Re: Re: Trasformare una sequenza di controllo

    Esattamente, perciò hai
    - "\\" che vengono convertiti in tabulazioni
    - "t" in tabulazioni
    - "n" in newline

    E nulla di queste è corretto in quanto devi avere
    - "\\t" -> '\t'
    - "\\n" -> '\n'
    Ossia 2 caratteri -> 1 carattere

    L’unico modo di utilizzare uno solo switch che mi viene in mente è avere una stringa ausiliaria che contiene coppie di caratteri consecutivi (0-1, 1-2, 2-3 ecc…) e fare i controlli su questa… peccato che in C per comparare stringhe si usa strcmp quindi no.

    Quindi o usi if-else, o due switch, ma con uno solo switch non credo ci sia alcuna soluzione al tuo livello…
  • Re: Re: Trasformare una sequenza di controllo

    Ok grazie Achille
  • Re: Re: Trasformare una sequenza di controllo

    Modifica così
    
    	unsigned int i, j, esc=0;
    	for (j = i = 0; i < strlen(t); i++) {
    		switch (t[i])
    		{
    		case '\\':
    			if (esc) { s[j++] = '\\'; esc--; }
    			else esc++;
    			break;
    		case 't':
    			if (esc) { s[j++] = '\t'; esc--; }
    			else s[j++] = 't'; 
    			break;
    		case 'n':
    			if (esc) { s[j++] = '\n'; esc--; }
    			else s[j++] = 'n';
    			break;
    		default:
    			s[j++] = t[i];
    			break;
    		}
    	}
    	s[j] = '\0';
    
    e spiega perché adesso va meglio
  • Re: Re: Trasformare una sequenza di controllo

    Si lo spiego ma che cos'è esc? O anche if(esc) mi spieghi questa condizione?
  • Re: Re: Trasformare una sequenza di controllo

    Cosa è esc? E ti chiedo cosa è i ?

    if(esc) equivale a if(esc!=0)
  • Re: Re: Trasformare una sequenza di controllo

    I è l' indice per incrementare la posizione
    come fa ad equivalere a if (esc != 0)?
    è grazie al valore dell' espressione?
  • Re: Re: Trasformare una sequenza di controllo

    Tu hai chiesto cosa è esc e io ti ho chiesto cosa è i ... nel linguaggio C cosa sono ?

    Se ti sconvolge tanto, puoi scrivere

    if(esc != 0)

    e non pensarci più per ora.

    Ma dovresti conoscere queste cose perché il K&R ne parla nel capitolo IF-ELSE che è una cosa necessaria per programmare.
  • Re: Re: Trasformare una sequenza di controllo

    Non è facile, allora da quello che ho capito esc ha valore 0(all' inizio) o 1.
    Se t = '\\' : se (esc != 0) { s[j++] = '\\';esc torna a 0;}
    se (esc = 0) esc incrementa di 1;break;(si esce dal ciclo)...
    Se t = 't' : diventa una tabulazione(in sintesi);
    Se t = 'n' : diventa un newline(in sintesi);
  • Re: Re: Trasformare una sequenza di controllo

    Dovresti descrivere l'algoritmo. Qual è il funzionamento? Cosa fa la variabile esc?
  • Re: Re: Trasformare una sequenza di controllo

    La variabile esc permette di assegnare il giusto valore a s[j++]?
    Ci hai messo tanto per fare quel codice?
Devi accedere o registrarti per scrivere nel forum
32 risposte