Сравнивая каждый символ двух строк в C

0

Я пишу программу, которая позволяет пользователю вводить пользовательский пароль, а затем проверять, соответствуют ли они определенным критериям в этом случае; 1. Должно быть от 9 до 15 символов. 2. Должно быть два или более символов в верхнем и нижнем регистре. 3. Должно быть 2 или более номеров. 4. должен содержать 1 или более символов.

Моя проблема в том, что я, кажется, не сравниваю строки правильно, так как когда я запускаю ее, она говорит: "Ваша строка содержит 0 строчных букв, 0 прописных букв, 0 символов, 0 чисел" и т.д. Я предполагаю, что это происходит потому, что она не проходит требования к операторам if. Я попытался использовать strcmp вместо этого, но не повезло.

(Пожалуйста, несите меня, поскольку я очень новичок в C)

Вот мой код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>


char upCase [] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char lowCase [] = {"abcdefghijklmnopqrstuvwxyz"};
char numbers [] = {"1234567890"};
char symbols [] = {"!#$%&'()*+-./:;<=>?@[\]^_'~"};
char passwordCheck [15+1];
int numCount = 0;
int lCaseCount = 0;
int uCaseCount = 0;
int symbolCount = 0;
int i = 0;
int randLCase, randNum, randUCase, randSymbol;
int charCount = 0;

void main()
{
    fflush(stdin);
    printf("\nEnter your password for checking: ");
    scanf("%s", passwordCheck);  // reads number
    if (strlen(passwordCheck) > 15)
    {
        printf("'%s' is too long.\nIt must be between 9 and 15 characters", passwordCheck);
    }
    else if (strlen(passwordCheck) < 9)
    {
        printf("'%s' is too short.\nIt must be between 9 and 15 characters", passwordCheck);
    }

    else
    {
        int j;
        int upCaseCheck, lowCaseCheck, symbolCheck, numCheck;
        printf("Checking password '%s'..\n", passwordCheck);

        for (j = 0 ; j >= strlen(passwordCheck); j++)
        {
            // check amount of uppercase characters in user password
            for (upCaseCheck=0; upCaseCheck <= strlen(upCase); upCaseCheck++)
            {
                if (passwordCheck[j] == upCase[upCaseCheck])
                {
                    uCaseCount++;
                } 
            }
            // check amount of lowercase characters in user password
            for (lowCaseCheck=0; lowCaseCheck <= strlen(lowCase); lowCaseCheck++)
            {
                if (passwordCheck[j] == lowCase[lowCaseCheck])
                {
                    lCaseCount++;
                }
            }
            // check amount of numbers in user password
            for (numCheck=0; numCheck <= 15; numCheck++)
            {
                if (passwordCheck[j] == numbers[numCheck])
                {
                    numCount++;
                }
            }
            // check amount of symbols in user password
            for (symbolCheck=0; symbolCheck <= strlen(symbols); symbolCheck++)
            {
                if (passwordCheck[j] == symbols[symbolCheck])
                {
                    symbolCount++;
                }
            }
        } // end outer for

        printf("Your password %s contains:\n %d numbers\n %d uppercase letters\n %d lowercase numbers\n %d symbols",
        passwordCheck, numCount, uCaseCount, lCaseCount, symbolCount);
        fclose(fp);
        printf("\n\n");
        system("pause");
}

Заранее спасибо за любую помощь.

  • 0
    У внешнего цикла for есть проблема .. он не входит в условие. измените его на j <strlen (passwordCheck)
  • 0
    Я действительно ненавижу программы, которые навязывают глупые ограничения на пароль. Не делай этого, пожалуйста. 15 символов слишком мало, и если у меня есть пароль в 20 символов в нижнем регистре, он не будет автоматически небезопасным.
Показать ещё 3 комментария
Теги:

2 ответа

2
Лучший ответ

У вас есть проблемы с ограничениями цикла:

for (j = 0 ; j >= strlen(passwordCheck); j++)

немедленно false, поэтому все внутри этого цикла не будет выполнено.

Затем, чтобы "исследовать" строку от 0 до ее последнего символа, проверка

для (j = 0; j <длина; j++)

и не <=.

  • 0
    Это исправило все! Я пинаю себя за то, что не заметил это в цикле for! Спасибо и всем, кто ответил!
2

Эта строка

for (j = 0 ; j >= strlen(passwordCheck); j++) /

должен выглядеть так

for (j = 0 ; j < strlen(passwordCheck); j++)

Как и при инициализации j в 0 а затем при тестировании j для be >= strlen(...), причем последний, скорее всего, возвращает что-то большее 0, цикл выходит без какой-либо итерации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню