【问题标题】:isalpha() function in C don't readC 中的 isalpha() 函数不读取
【发布时间】:2020-03-08 15:15:57
【问题描述】:

我正在尝试编写替换密码,但是它的一部分,特别是如果插入的字母表仅由文本字符“a ... z”组成时它看到我的那个,对我不起作用.你能告诉我为什么 isalpha 函数(alfabeto_sostitutivo)虽然我插入了普通字母,但结果却是 0?提前感谢您花费的时间。

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

int main () {

  int  caratteri_diversi_1 = 0, caratteri_diversi_2 = 0, b = 0, tutti_alpha = 0, alpha_minuscoli = 0,            alpha_maiuscoli = 0;
  char alfabeto_sostituzione [27];

  printf ("Inserisci l'alfabeto di criptazione (inglese):\n");
  fgets  (alfabeto_sostituzione, sizeof(alfabeto_sostituzione), stdin);
    if (strlen(alfabeto_sostituzione)==26) //se la lunghezza dell'alfabeto sostitutivo è giusta
      {
        printf("I due alfabeti sono lunghi uguale\n");
        for (int c=0; alfabeto_sostituzione[c] != '\0'; c++)
          {
            if (isalpha(alfabeto_sostituzione[c])==1)
              alpha_minuscoli++;
            else if (isalpha(alfabeto_sostituzione[c])==2)
              alpha_maiuscoli++;
          }
        tutti_alpha = alpha_minuscoli + alpha_maiuscoli;
        printf("alpha_minuscoli: %d\n",alpha_minuscoli);
        printf("alpha_maiuscoli: %d\n",alpha_maiuscoli);
        printf("tutti_alpha: %d\n",tutti_alpha);
        if (tutti_alpha < 26 )
          printf("L'alfabeto inserito NON contiene solo caratteri dell'alfabeto\n");
      }
  }

通过填写程序,返回如下文本:

Inserisci l'alfabeto di criptazione(英文):

abcdefghijklmnopqrstuvwxyz

我应得 alfabeti sono lunghi uguale

alpha_minuscole: 0 alpha_maiuscole:0

tutti_alpha: 0

L'alfabeto inserito NON contiene solo caratteri dell'alfabeto

【问题讨论】:

  • 因为您没有将其与零进行比较?您正在将其与1 进行比较。并且只保证产生非零。出于某种原因,您甚至将其与2 进行比较?
  • 请注意isalpha(str[c]),其中参数strchar 的数组,是不安全的。 char 可以签名,这意味着它可以有负值。 isalpha(和其他 ctype.h 函数)的输入必须是非负值(在 0 到 UCHAR_MAX 范围内),或者是负常数 EOF 的值(不仅仅是任何负值)。基本上,这些函数的输入约定来源于getc函数的返回值约定;它们旨在对使用getc 读取的输入字符进行分类。
  • 因为我已经尝试输入 0 但它似乎没有读懂我,因此为了验证它,我尝试查看相反的情况。我使用 1 和 2 是因为我读到如果我读取的字符很小,该函数会给我 1,而如果我读取的字符是大写的,它会返回 2。
  • 我读到如果我读取的字符很小,该函数会给我 1,而如果我读取的字符是大写的,它会返回 2 - 不可能。你在哪里读到的?
  • Kaz - 如果我使用无符号字符,它可以工作吗?

标签: c isalpha


【解决方案1】:
  • isalpha(argument)ctype.h 中声明的其他相关函数 如果参数满足条件,则返回非零(真) 描述,否则为零(假)。

由于您正在检查 lowerupper 大小写字符,ctype 库已经定义了函数 islower(argument)isupper(argument)。 您可以将它们与isaplha 函数一起使用,就像这样......

for (int c=0; alfabeto_sostituzione[c] != '\0'; c++)
      {
        if (isalpha(alfabeto_sostituzione[c]))
          {
            if(islower(alfabeto_sostituzione[c]))
              alpha_minuscoli++;
            else
              alpha_maiuscoli++;
          } 
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2014-01-20
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多