Domanda

Ho problemi con questa pace del codice, dovrebbe cambiare lettere minuscole in maiuscolo e trasformare più spazi in uno spazio.Quindi cosa fa parte, in qualche modo taglia la prima lettera come quando scrivo "abcdefg" mi ha contato sull'output "BCDefg".

main(){ 
int z=0,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}
.

È stato utile?

Soluzione

Sembra generare tutte le lettere per me ... hai provato a rintracciarlo, per scoprire cosa sta facendo ad ogni passaggio con i personaggi che hai inserito?

Altri suggerimenti

La tua manipolazione dello spazio vuoto ha alcuni problemi.

Sembra che tu stia stampando uno spazio in ogni caso (quando il tuo getchar restituisce 0x20).

Puoi iniziare con questo per eliminare il problema dei tuoi spazi. Altrimenti hai un particolare input problematico.Perché non ho alcun problema "Prima lettera tagliata".

main(){ 
int z=1,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
                z=1;
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}
.

Prima non dovresti mai usare costanti come "32" e lascia che il sistema definisca ciò che i valori sono.IE: B -= Char ('');

Secondo, andare a guardare le funzioni "Isole ()" e "TOUPPER ()" e C lo farà automaticamente per te.

Considera qualcosa del genere:

Includi

Main () {

    int     flag = 0;
    char    b;

    while ((b=getchar()) != '\n') {
            if (flag && isspace(b))
                    continue;
            putchar(toupper(b));
            if (isspace(b)) {
                    flag = 1;
                    continue;
            }
            flag = 0;
    }
    putchar('\n');
.

}

Input: "A BC Def Ghijghg 123 A1B2C3"

Uscita: "A BC DEF GHIJGHG 123 A1B2C3"

Nota: sembra che la casella di testo sia eliminando gli spazi poiché la linea di input ha un sacco di spazi vuoti in esso.

Dovresti sempre essere consapevole delle tue condizioni di confine.Se l'ingresso inizia sarà un mucchio di spazi stampa ancora uno spazio.Per eliminare tutti gli spazi leader, inizializzare la bandiera= 1. Stampare anche uno spazio finale se l'ingresso ha spazi di trascinamento.Per eliminare quelli che avresti bisogno di una soluzione leggermente diversa, una dove si stampa uno spazio dopo aver visto uno spazio e un altro carattere stampabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top