Espérons que quelqu'un peut m'aider ici. J'essaie de créer un programme qui compte le nombre de mots, de voyelles, de caractères spéciaux, etc. Après avoir fait des creuser, j'ai réalisé que les valeurs étant stockées pour une seule apostrophe comptent pour 3 positions où il ne faut en être qu'un. Si quelqu'un sait comment résoudre ce problème, je l'apprécierais grandement! Merci !!
for (int i = 0; sentence[i] != '\0'; ++i) { if (sentence[i] == 'a' || sentence[i] == 'e' || sentence[i] == 'i' || sentence[i] == 'o' || sentence[i] == 'u'|| sentence[i] == 'A' || sentence[i] == 'E' || sentence[i] == 'I' || sentence[i] == 'O' || sentence[i] == 'U') { ++numVowels; } else if (sentence[i] == ' ') { ++numSpaces; } else { ++numSpecials; printf("%c\n",sentence[i]); } if ((sentence[i] == ' ' && sentence[i+1] != ' ') || (sentence[i] != '\0' && sentence[i+1] == '\0')) { ++numWords; } } printf("Number of words: %d\n", numWords); printf("Number of spaces: %d\n", numSpaces); printf("Number of vowels: %d\n", numVowels); printf("Number of consonants and special characters: %d\n", (numSpecials));
3 Réponses :
Votre entrée utilise probablement codage UTF-8 . Voici la liste des caractères pouvant être stockés dans un octet unique: http://www.asciditable.com/ a> p>
Utilisez-vous la même apostrophe que là-bas? P>
Sinon, vous ne devez pas le gérer comme plusieurs octets. P> ' code> p>
C'est juste lorsque la phrase prise a une apostrophe, la même chose que vous utilisez ci-dessus. Je veux que le compte n'augmente que par un au lieu de 3 quand il est utilisé.
Merci d'avoir souligné que moi sur l'apostrophe étant un code différent. J'utilisais une phrase d'échantillon d'un document Word que j'ai copié et collé, qui a créé le problème, mais en tapant manuellement dans la phrase fixe le problème!
UTF-8 est un codage de largeur variable, vous devez donc ignorer le point de code complet (qui peut être codé par plusieurs octets). C'est simple à faire une fois que vous avez appris la règle de codage de UTF-8 (moins les choses durs comme la séquence la plus courte ou la vérification de séquence non valide ...) p>
Cependant, puisque vous voulez compter mots, voyelles, caractères spéciaux em> qui est trop large. Comment compteriez-vous des personnages tels que á, è, ü ...? Que sont considérés comme des caractères spéciaux? Il existe des dizaines de milliers de chacun d'eux et vous ne pourrez pas travailler sur une solution générale sans aucune bibliothèque externe p>
Si vous voulez juste faire cela comme un exercice, envisagez de limiter l'entrée à \ 342 \ 200 \ 231 code> est
E2 80 99 code> en hex, qui est le UTF-8 forme codée de U + 2019 Bonne cotation unique qui est
Merci pour votre aide, j'ai compris ce qui se passait.
Bienvenue à la programmation Unicode. Ce que vous avez, il existe une "bonne guillemande unique", éventuellement d'une sorte d'éditeur de documents Word car ils remplaceront couramment Si vous avez besoin de traiter avec Unicode, vous voudrez probablement utiliser une bibliothèque Unicode ou les données de l'unicode.org Communiqués . Lors de la décodage UTF-8 elle-même est facile, des questions telles que "est-ce une marque de ponctuation?", "Est-ce un espace?", "Est-ce une partie d'une lettre?" etc. ne sont pas. p>
Les données spécifiques que vous souhaitez obtenir, je crois que la "catégorie de caractères unicode". La majeure partie des catégories étant: p>
Il y a aussi de nombreuses sous-catégories, bien que je ne pense pas que vous en ayez besoin. http://www.fileformat.info/info/unicode/category/index. HTM semble avoir une liste de jolie à rechercher en ligne. P>
La principale caractéristique du problème est probablement le nombre de «voyelles» comme cela ne se traduit pas correctement à toutes les langues / scripts. Potentiellement, vous pourriez "décomposer" des choses comme á et ne compter que les lettres AEIOU résultantes à votre usage. P> " code>,
' code>, etc. avec le plus spécifique basé sur le contexte. P>
Si vous avez besoin de gérer UNICODE, envisagez de convertir en UTF-32 d'abord. Utilisez une bibliothèque Unicode pour le faire. Vous pouvez également convertir en latin1 par exemple, ignorer les caractères qui n'existent pas en latin1, mais toujours, utilisez une bibliothèque. 7 bits Conversion ASCII que vous pourriez faire à la main sensiblement, je suppose.
VTC en tant qu'étraction de faute de frappe - Fait intéressant une erreur de typo dans la saisie de données.