c++ - 计算字符串中的元音、辅音、数字和其他符号

标签 c++ visual-c++

我正在尝试计算一个字符串中有多少个元音/辅音/数字/其他符号。

#include <stdio.h>
#include <string.h>
int main(void)
{
    int cons = 0, vow = 0, num = 0, oth = 0;
    int i, length;
    char str[100];

    printf("Input a string with no space : ");
    scanf("%s", &str);
    printf("=====================================\n");
    length = strlen(str);

    for(i = 0; i < length; i++)
    {
        switch(str)
        {
        case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': case 'A':
        case 'E': case 'I': case 'O': case 'U': case 'Y':
            vow++;
            break;
        case 'b': case 'c': case 'd': case 'f': case 'g': case 'h': case 'j':
        case 'k': case 'l': case 'm': case 'n': case 'p': case 'q': case 'r':
        case 's': case 't': case 'v': case 'w': case 'x': case 'z':
        case 'B': case 'C': case 'D': case 'F': case 'G': case 'H': case 'J':
        case 'K': case 'L': case 'M': case 'N': case 'P': case 'Q': case 'R':
        case 'S': case 'T': case 'V': case 'W': case 'X': case 'Z':
            cons++;
            break;
        case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
        case 9:
            num++;
            break;
        default:
            oth++;
            break;
        }  
    } 
    printf("%s\n", str);
    printf("Number of consonants: %d\n", cons);
    printf("Number of vowels: %d\n", vow);
    printf("Number of numbers: %d\n", num);
    printf("Number of other symbols: %d\n", oth);
}

我知道我的问题缺少我的“开关”,但我真的不知道该放什么。我是否应该输入字符串名称之外的其他内容?

最佳答案

访问 C 字符串中所有字符的常用方法有两种:

  • 使用索引 - 在您的情况下,这意味着 str[i]
  • 使用指针 - 这会让您避免 strlen 调用。

这是第二种方法的样子:

for (char* p = str ; *p != '\0' ; p++) {
    switch (*p) {
        ...
    }
}

请注意,length 和索引 i 不再是必需的,因为当指针 p 到达空终止符时循环将终止。

另请注意 scanf("%s", &str); 不安全 - 您需要告诉 scanf 您的缓冲区有多大:

int numScanned = scanf("%99s", str);

这将防止缓冲区溢出。请注意 99 用于 100-char 缓冲区:这样做是为了为空终止符保留一个 char。另请注意,您不应将 & 放在 str 的前面,因为在调用函数时,数组已被视为指针。

您应该检查 numScanned 是否等于 1 以检测 scanf 中可能出现的故障。

关于c++ - 计算字符串中的元音、辅音、数字和其他符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509125/

相关文章:

c++ - Visual C++ 2005 - 默认情况下本地 int 和 double 变量是否初始化为 0?

c++ - 嵌套模板类中的 std::conditional

c++ - 使用字符串数组检查用户输入

c++ - volatile 和多线程?

C++二进制搜索以查找不动点的索引

c++ - 我需要调用 CloseHandle 吗?

c++ - 以 qreal 引用作为参数的语法

c - 为什么下面的输出?

c++ - libsvn - svn_pool_create() - Unresolved external 问题

c++ - 如何在 Visual Studio 上更改特定关键字颜色?