Напишите функцию, которая читает строку за строкой из консоли и печатает количество символов для каждой загруженной строки. - PullRequest
0 голосов
/ 22 апреля 2020

Напишите функцию, которая читает строку за строкой из консоли и печатает количество символов для каждой загруженной строки. Максимальная длина читаемой строки должна составлять 20 символов.

У меня есть что-то, что просто идет через l oop и печатать снова и снова во входную строку. У меня проблема с - Печатать количество символов после каждого пользовательского ввода и установить максимальный ввод символов до 20 для экзамена. Кто-нибудь, чтобы помочь мне?

     char str[str_size];
    int alp, digit, splch, i;
    alp = digit = splch = i = 0;


    printf("\n\nCount total number of alphabets, digits and special characters :\n");
    printf("--------------------------------------------------------------------\n");
    do {
        printf("Input the string : ");

        fgets(str, sizeof str, stdin);

    } while (str[i] != '\0');
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
        {
            alp++;

        }
        else if (str[i] >= '0' && str[i] <= '9')
        {
            digit++;
        }
        else
        {
            splch++;
        }

        i++;

printf("Number of Alphabets in the string is : %d\n", alp + digit + splch);


}

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Кажется, что программа может выглядеть следующим образом

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

int main(void) 
{
    enum { str_size = 22 };
    char str[str_size];

    puts( "\nCount total number of alphabets, digits and special characters");
    puts( "--------------------------------------------------------------");

    while ( 1 )
    {
        printf( "\nInput a string less than or equal to %d characters (Enter - exit): ",
                str_size - 2 );

        if ( fgets( str, str_size, stdin ) == NULL || str[0] == '\n' ) break;

        unsigned int alpha = 0, digit = 0, special = 0;

        // removing the appended new line character by fgets
        str[ strcspn( str, "\n" ) ] = '\0';

        for ( const char *p = str; *p != '\0'; ++p )
        {
            unsigned char c = *p;

            if ( isalpha( c ) ) ++alpha;
            else if ( isdigit( c ) ) ++digit;
            else ++special;
        }

        printf( "\nThere are %u letters, %u digits and %u special characters in the string\n",
                alpha, digit, special );    
    }

    return 0;
}

Вывод программы может выглядеть следующим образом:

Count total number of alphabets, digits and special characters
--------------------------------------------------------------

Input a string less than or equal to 20 characters (Enter - exit): April, 22, 2020

There are 5 letters, 6 digits and 4 special characters in the string

Input a string less than or equal to 20 characters (Enter - exit): 

Если пользователь просто нажмет клавишу Enter, l oop will fini sh.

Обратите внимание, что программа рассматривает пробелы и знаки пунктуации как специальные символы.

0 голосов
/ 22 апреля 2020

Я не понимаю, что вы делаете с do while l oop в вашем коде. Так что я просто предлагаю еще один l oop для вашего случая. Я не уверен, но надеюсь, что вам нужен код.

int main() {
    char str[22];
    int alp, digit, splch, i;
    printf("\n\nCount total number of alphabets, digits and special characters :\n");
    printf("--------------------------------------------------------------------\n");
    printf("Input the string : ");
    while (fgets(str, sizeof str, stdin)){
        alp = digit = splch = 0;
        for (i = 0; i < strlen(str); i++ ) {
            if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
            {
                alp++;
            }
            else if (str[i] >= '0' && str[i] <= '9')
            {
                digit++;
            }
            else if(str[i] != '\n')
            {
                splch++;
            }
        }
        printf("alp = %d, digit = %d, splch = %d\n", alp, digit, splch);
        printf("Input the string : ");
    }
    return 0;
}

OT, для определения альфа или ди git вы можете использовать функции isdigit() и isalpha(). Это проще, чем то, что вы использовали в своем коде.

...