Question

J'ai un problème avec cette paix de code, cela devrait changer les lettres minuscules en majuscules et transformer plusieurs espaces en un espace.Donc, ce que cela ne va pas, cela coupe en quelque sorte la première lettre comme lorsque j'écris «ABCDEFG», cela me rend heavress sur la sortie "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(" ");
                }
            }


        }
}

Était-ce utile?

La solution

Il semble générer toutes les lettres pour moi ... Avez-vous essayé de le traduire, de savoir ce qu'il fait à chaque étape avec les personnages que vous avez entrés?

Autres conseils

Votre manipulation d'espace vide a quelques problèmes.

Il semble que vous imprimez un espace dans tous les cas (lorsque votre GetChar retourne 0x20).

Vous pouvez commencer avec cela pour éliminer votre problème d'espaces. Sinon, avez-vous une entrée problématique particulière.parce que je n'ai pas de problème "de première lettre".

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(" ");
                }
            }


        }
}

Tout d'abord, vous ne devez jamais utiliser des constantes comme "32" et laisser le système définir les valeurs.C'est-à-dire: B -= char ('');

Deuxièmement, allez regarder les fonctions "Islower ()" et "Toupper ()" et c va -venir automatiquement cela pour vous.

considère quelque chose comme ceci:

Inclure

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');

}

entrée: "A BC def def GHIJGHG 123 A1B2C3"

sortie: "Un BC def def GHIJGHG 123 A1B2C3"

Remarque: On dirait que la zone de texte élimine les espaces car la ligne d'entrée a beaucoup de blancs dedans.

Vous devez toujours être conscient de vos conditions limites.Si l'entrée commence une bande d'espaces, il imprimera toujours un espace.Pour éliminer tous les grands espaces, initialisez le drapeau= 1. Il imprimera également un espace final si l'entrée a des espaces de fuite.Pour éliminer ceux dont vous auriez besoin d'une solution légèrement différente, une fois que vous imprimez un espace après avoir vu un espace et un autre caractère imprimable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top