在 c 中创建 count_letters 函数?

creating a count_letters function in c?

任务:创建一个 C 代码,从用户那里获取一些文本输入并打印出其中的字母数。字母可以是任何大写或小写字母字符,但不应包含任何标点符号、数字或其他符号。

#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
#include <string.h>

int main (void)
{
    char alphabets[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    string text = get_string("Text: ");
    int length = strlen(text);
    int n = 0;
    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < length; j++)
        {
            if (alphabets[j] == text[i] || toupper(alphabets[j]) == text[i])
            {
                m++;
            }
        }
        if (m == 0)
        {
            length--;
        }
        m = 0;
    }
    printf ("%i letter(s) \n", length);
    
}

你应该使用isalpha

那么你可以简单地做:

int main (void)
{
    string text = get_string("Text: ");
    size_t length = strlen(text);
    int n = 0;
    for (size_t i = 0; i < length; ++i)
    {
        if (isalpha(text[i])) ++n;
    }
    printf ("%i letter(s) \n", n);   
}

嵌套的 for 循环与变量 length 一起在这个调用中使用

printf ("%i letter(s) \n", length);

没有意义。

还有这个变量

int n = 0;

未使用。

并且调用标准函数strlen效率低下。

您只需要一个 for 循环,您将在其中检查给定字符是否代表一个字母。

注意头文件<ctype.h>中声明了标准C函数isalpha判断一个字符是否为字母

程序可以这样看

#include <stdio.h>
#include <ctype.h>
#include <cs50.h>

int main( void )
{
    string text = get_string( "Text: " );

    size_t n = 0;

    for ( string current = text; *current != '[=12=]'; ++current )
    {
        if ( isalpha( ( unsigned char )*current ) ) ++n;
    }

    printf( "%zu letter(s)\n", n );
}