搜索Word的输出字符串

时间:2014-01-07 15:50:02

标签: c

所以我的代码,当你输入1时,输出一个12个字符的字符串。 我希望能够在字符串中搜索一个单词......

我已完成代码...但我不确定它在我的代码中的位置。 搜索单词的代码位于底部,我不知道如何进行搜索 但是字符串。

有人可以帮忙吗?

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


FILE*fp; 

char *symbols = "#~!$%^&*()+=<>?/@"; // Random Symbol is generated form this list

int main(void) {

char password[4 + 4 + 2 + 2 + 1]; // 4 Upper, 4 Lower, 2 Num, 2 Symbols
int i, j=0, len=sizeof(password)-1;
int menuNum = 0;
char passwordCheck[15+1];

fp = fopen("passwords.txt", "a+"); //Opens the text file to save the Passwords

srand(time(NULL));
printf("       Main Menu\n");
printf("********************************\n");
printf("\nEnter 1 to Generate a New Password: ");
printf("\n\n");
printf("Enter 2 to Check Old Passwords: ");
printf("\n\n");
printf("Enter 3 to Check Password for Small Words: ");
printf("\n\n");

scanf("%d", &menuNum); // reads number

if (menuNum == 1) // If 1 is entered on the Menu...
{
    printf("********************************\n");
    printf("\nYour New Password is: \n\n");

// Each Password will Have 12 Characters(4 Uppercase letters, 4 Lowercase letters, 2 Numbers & 2 Symbols)

for (i = 0; i < 4; ++i)
    password[j++] = 'a' + rand() % ('z' - 'a' + 1); // Generates 4 random Lowercase characters 

for (i = 0; i < 4; ++i)
    password[j++] = 'A' + rand() % ('Z' - 'A' + 1); // Generates 4 random Uppercase characters

for (i = 0; i < 2; ++i)
    password[j++] = '0' + rand() % ('0' - '9' + 1); // Generates 2 random numbers

for (i = 0; i < 2; ++i)
    password[j++] = symbols[rand() % strlen(symbols)]; // Generates 2 random symbols

password[j] = '\0';
for(i = 0; i < sizeof(password)-1; ++i)
    {
    char c = password[i];
    j = rand() % len;
    password[i] = password[j];
    password[j] = c;
    } // Shuffles passwords Characters

printf("%s\n\n", password);
printf("********************************\n");
fprintf(fp, "\n%s", password); // Outputs the Generated Passoword to the text file
fclose(fp); // Closes the text file
system("pause");
}


else if (menuNum == 2)
{           
    printf("\nEnter your password for checking: ");
    printf("%s", passwordCheck);  // reads password
    if (strlen(passwordCheck) > 15) // Checks length of Password
    {
        printf("'%s' is too long. Needs to be less then 15 Characters\n", passwordCheck);
        system("pause");
    }
    else if (strlen(passwordCheck) < 9) //Checks length of Password
    {
        printf("'%s' is too short. Needs to be more then 9 Characters\n", passwordCheck);
        system("pause");
    }
}


else if(menuNum == 3)
{
    if ( strstr (passwordCheck, "car") != NULL);
    {
        printf("Password contains a common word, such as \"car\"\n\n");
        system("pause");
    }
}

}

1 个答案:

答案 0 :(得分:0)

而不是if else梯子。使用switch语句。

即使menuNum等于2的代码也有逻辑错误

else if (menuNum == 2)
{           
printf("\nEnter your password for checking: ");
printf("%s", passwordCheck);  // just writes the string present in passwordCheck
}

这会将passwordCheck打印到屏幕上而不读取它。

对所有三种情况使用infinte while循环,因为只有一个测试用例在给定的执行中运行而你试图在passwordCheck中检查“car”,这将是垃圾或无法访问

//其他选项是尝试将文件中的密码读入passwordCheck变量,以便您可以检查。

if ( strstr (passwordCheck, "car") != NULL); // either un reachable or garbage value  
{
    printf("Password contains a common word, such as \"car\"\n\n");
    system("pause");
}