J'ai fait une méthode qui a changé une petite lettre à la lettre majuscule. Par exemple, lorsque j'entraîne 'i Love C langage' dans la méthode, elle génère "j'adore C langage".
Enfin, j'ai fabriqué une méthode entière, mais cela avait une erreur. Je ne connais pas la raison pour laquelle il ne pouvait pas fonctionner ... Aidez-moi ..! P>
Je construis déjà ce code dans Visual Studio 2019. P>
#include <stdio.h> void LetterCapitalizer(char* str) { const int convertCapital = 32; const char emptySpace = ' '; str[0] = str[0] + convertCapital; for (int i = 0; str[i] != '\0'; ++i) { if(i == emptySpace) str[i+1] = str[i+1] + convertCapital; } printf("%s", str); } int main(void) { LetterCapitalizer("i am a boy"); return 0; }
3 Réponses :
Deux petites choses pour améliorer votre programme: Cela vous permettra de ne pas écrire dans un Deuxièmement, si votre chaîne contient un espace
Tout d'abord, comme @PMG a dit, remplacez le LetterCapitalizer ("Je suis un garçon"); code> par
Lecture seule Code> String littermal.
P> code>, vous convertiez le prochain caracter fort>. .. Dans ce cas, vous pouvez simplement ignorer l'itération actuelle et aller au suivant.
Enfin, si vous n'avez aucune restriction sur les fonctions C appellent, il existe une fonction Toupper () code> qui prend un véhicule et la convertit en majuscule! P> P>
Cette méthode avec convertcapital code> n'est pas portable, par exemple, il n'a pas fonctionné sur ma machine (je devais soustraire 32, pas ajouter 32). Utilisez
TOUPPER code> à la place:
void LetterCapitalizer(char* str)
{
const char emptySpace = ' ';
putchar(toupper(str[0]));
for (int i = 1; str[i] != '\0'; ++i)
{
putchar(str[i]);
if (str[i] == emptySpace) {
putchar(toupper(str[i + 1]));
i++;
}
}
}
Dans votre exemple, il donne une faute de segmentation lorsque vous libérez la variable «Strcopy» avant de l'imprimer ...
J'évite généralement l'allocation à l'intérieur d'une fonction qui renvoie vide code> car il n'y a généralement aucun moyen d'obtenir une erreur (si le
malloc () code> échoue) sans casser le programme.
@Johnszakmeister bon point. J'ai posté une version sans allocation de mémoire supplémentaire pour montrer comment cela pourrait ressembler.
Vous pouvez utiliser un drapeau pour indiquer que le prochain caractère sans espace doit être capitalisé. Vous pouvez stocker la chaîne de résultat dans une autre chaîne. puis renvoyez cette chaîne de résultat. J'ai corrigé le code. S'il vous plaît voter si cela vous a aidé.
Vous devez importer
bool code> et
string.h code> for
strallen () code> fonction
De plus, vous devez soustraire 32 car dans ASCII, les lettres captiales arrivent avant que leur code ASCII est de 32 lettres. Vous pouvez voir la table complète ASCII ici
Si vous frappez un espace, vous allez convertir le caractère suivant i>. Ensuite, la boucle passe au caractère suivant et la convertit à nouveau. Ce n'est probablement pas ce que vous voulez.
"Je suis un garçon" code> est un littéral string b> et il est "en lecture seule". Essayez
Char TMP [] = "Je suis un garçon"; Lettercapitalizer (TMP); code> parce que le contenu de
tmp code> peut être modifié
Je veux changer de paramètre, mais je ne peux pas. Je ne peux que utiliser Char * Str en paramètre.
Un problème est que vous ne savez pas comment utiliser un débogueur. Au lieu de deviner ou de demander si, apprenez à utiliser l'excellent débogueur intégré à Visual Studio. Essayez ceci: Démarrez votre programme avec la touche F11 (étape dans). Ensuite, utilisez F10 (étape) pour parcourir votre programme. Il affichera vos valeurs variables à chaque étape. Continuez à marcher et à regarder et vous trouverez au moins certains de vos bugs tout de suite.