如何将撇号更改为一个单位而不是3个字节? (\ 342 \ 200 \ 231)使用C

问题描述 投票:0回答:2

希望有人可以在这里帮助我。我试图创建一个程序来计算单词,元音,特殊字符等的数量。在进行了一些挖掘之后,我意识到为单个撇号存储的值将对3个位置进行计数,该位置应仅为1。如果有人知道如何解决这个问题,我将不胜感激!谢谢!!

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

希望有人可以在这里帮助我。我试图创建一个程序来计算单词,元音,特殊字符等的数量。在进行一些挖掘之后,我意识到所存储的值...

c counting
2个回答
1
投票

\342 \200 \231是十六进制的E2 80 99,是UTF-8U+2019 RIGHT SINGLE QUOTATION MARK编码形式,]是撇号。它是Unicode中的smart quotes之一


0
投票
您的输入可能使用UTF-8 encoding。以下是可以存储在单个字节中的字符列表:http://www.asciitable.com/

您是否使用与那里相同的撇号?

'


0
投票
欢迎使用Unicode编程。您所拥有的是“正确的单引号”,可能是某种Word文档编辑器提供的,因为它们通常会根据上下文自动将"'等自动替换为更具体的一个。

如果需要处理Unicode,则可能要使用Unicode库或unicode.org releases中的数据。虽然对UTF-8本身进行解码很容易,但是诸如“这是标点符号吗?”,“这是空格吗?”,“这是字母的一部分吗?”之类的问题。等不是。

我想获得的特定数据是“ Unicode字符类别”。最热门的类别是:

© www.soinside.com 2019 - 2024. All rights reserved.