Как исправить проблему подсчета букв, символов, цифр в строке, используя функцию проверки номера - PullRequest
0 голосов
/ 12 июня 2019

Я хочу считать буквы, цифры, символы, используя функцию password. Похоже, что он неправильно рассчитывает числа, потому что я получаю 0 для каждого printf в конце

#include <stdio.h>
void password(char * str[],int together,int numbers,int symbols,int i,int uppercase,int lowercase);
int main()
{
    char str[100];
    int together, numbers, symbols, i,uppercase,lowercase;

        together = numbers = symbols = i = uppercase = lowercase = 0;

    printf("password : ");
    gets(&str);
    printf(" %s", str);
    password(&str,together,numbers,symbols,i,uppercase,lowercase);
    printf("Number of letters = %d\n", together);
    printf("number uppercase  = %d\n", uppercase);
    printf("Number lowecase  = %d\n", lowercase);
    printf("numbers = %d\n", numbers);
    printf("Simboli = %d", symbols);
if (together >= 8 && numbers >= 2){
    printf("\nPassword is correct");
}else{
    printf("\nPassword isn't correct");
}
    return 0;
}
void password(char * str[],int together,int numbers,int symbols,int i,int uppercase,int lowercase){
     while(*str[i]!='\0')
    {
        if((*str[i]>='a' && *str[i]<='z') || (*str[i]>='A' && *str[i]<='Z'))
        {
            together++;
        }
        else if(*str[i]>='0' && *str[i]<='9')
        {
            numbers++;
        }
        else if(*str[i] >= 'A' && *str[i] <= 'Z') {
         uppercase++;
        }
        else if(*str[i] >= 'a' && *str[i] <= 'z'){
            lowercase++;
        }
        else
        {
            symbols++;
        }

        i++;
    }
}

Я получаю нули для каждого числаПрограмма запуска букв, символов работает без ошибок. Я пытался что-то изменить, но сейчас изучаю C, так что мне трудно!

1 Ответ

1 голос
/ 12 июня 2019

Несколько баллов: 1) Нет необходимости передавать i в качестве аргумента, поскольку вы можете получить длину вашей строки с помощью strlen из string.h (которая возвращает тип size_t, а не int).2) Вы передали свои аргументы как значение, что означает, что они будут изменяться только локально для вашей функции.3) Не используйте небезопасную функцию get, вы можете использовать fgets или scanf.

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

void password(char *str, int *together, int *numbers, int *symbols, int *uppercase, int *lowercase){
    for(size_t i=0; i<strlen(str); i++){
        if(str[i] >= '0' && str[i] <= '9') (*numbers)++;
        if(str[i] >= 'A' && str[i] <= 'Z') (*uppercase)++;
        if(str[i] >= 'a' && str[i] <= 'z') (*lowercase)++;
        if(str[i] >= '!' && str[i] <= '/') (*symbols)++;
    }
    *together = (*uppercase) + (*lowercase);
}

int main(void){

    char str[100] = "Pa$$w0/2d";
    int together = 0;
    int numbers = 0;
    int symbols = 0;
    int uppercase = 0;
    int lowercase = 0;

    password(str, &together, &numbers, &symbols, &uppercase, &lowercase);
    printf("Letters = %d\n", together);
    printf("Uppercase  = %d\n", uppercase);
    printf("Lowercase = %d\n", lowercase);
    printf("Numbers = %d\n", numbers);
    printf("Symbols = %d\n", symbols)

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...