【问题标题】:Returning integer from comparing two char arrays通过比较两个 char 数组返回整数
【发布时间】:2016-01-15 19:21:07
【问题描述】:

试图弄清楚这个特殊的功能。我需要它用 punct[] 扫描密码以查看它是否包含其中一个符号,但如果有一个整数,我需要它带回一个整数。我尝试了 n=strlen(password) 但似乎不起作用。这就是我到目前为止所拥有的。我也无法为有关 isalpha 和 isdigit 的 if 语句返回整数,该语句应该将密码传递给它。

char password[17] = { '\0' };
char punct[] = { '!','@','#','$','%','^','&','*','?','_', '\0' };

    printf("Enter your test password: \n");
    fgets(password, 15, stdin);

for (int j = 0; n = (strnlen(password)); j < n; j++) {
        if (isalpha(password[j]) == true){
        int b = 1;
        printf(" Must consist of at least one number 0-9.\n");
    }
}

for is digit 我有类似的想法,但我需要它遍历数组的长度

if(isdigit(passwords)){
return 1;}

【问题讨论】:

  • 返回一个整数是什么意思?和返回一个整数的麻烦什么整数??
  • 我正在尝试制作一个程序,让用户输入一些内容,然后检查它是否有数字、字母或标点符号。如果它缺少其中一项,它将带回一个错误。我希望程序为每个创建一个 1,然后有一个单独的等式,如果它们都是 1,它将给出一个成功的密码创建屏幕。如果这有意义的话。

标签: c arrays if-statement for-loop char


【解决方案1】:

使用 255 个无符号字符数组的最佳方式,unsigned char flags[255]

然后将数组初始化一次:

1= 阿尔法

2= 数字

4= 符号

memset(flags,0,255*sizeof(short));
for(unsigned int i='A';i<='Z';i++) flags[i]=1; 
for(unsigned int i='a';i<='z';i++) flags[i]=1;
for(unsigned int i='0';i<='9';i++) flags[i]=2;

flags[(unsigned char)'!']=4;
flags[(unsigned char)'@']=4;
flags[(unsigned char)'#']=4;
flags[(unsigned char)'$']=4;
flags[(unsigned char)'%']=4;
flags[(unsigned char)'^']=4;
flags[(unsigned char)'&']=4;
flags[(unsigned char)'*']=4;
flags[(unsigned char)'?']=4;
flags[(unsigned char)'_']=4;

然后运行测试:

short m_flags=0;
for(int i=0;i<strlen(password);i++)
    m_flags|=flags[password[i]];

结果=:

   if(m_flags & 1) //alpha present
   if(m_flags & 2) //numerics present
   if(m_flags & 4) //symbols present

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2015-01-19
    • 2015-07-19
    相关资源
    最近更新 更多