Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以设置一个循环来检查字母在英语字母表中的位置,而不是对每个字母使用if语句吗?(C)_C_Loops_If Statement - Fatal编程技术网

我可以设置一个循环来检查字母在英语字母表中的位置,而不是对每个字母使用if语句吗?(C)

我可以设置一个循环来检查字母在英语字母表中的位置,而不是对每个字母使用if语句吗?(C),c,loops,if-statement,C,Loops,If Statement,} 有没有办法循环打印英文字母表中的字母编号,而不是对每个字母使用if语句?只需将其指定给int: #include <stdio.h> int main(void) { char a; do{ printf("Enter an uppercase alphabet: "); scanf(" %c", &a); } while(a < 'A' || a > 'Z'); for(int i=1;i<=1;i++) { if(a=='A

}

有没有办法循环打印英文字母表中的字母编号,而不是对每个字母使用if语句?

只需将其指定给int:

#include <stdio.h>

int main(void)
{
char a;
do{
    printf("Enter an uppercase alphabet: ");
    scanf(" %c", &a);

} while(a < 'A' || a > 'Z');

for(int i=1;i<=1;i++)
{
  if(a=='A')
    printf("Alphabet number is 1");
  else if(a=='B')
    printf("Alphabet number is 2"); //and so on

}
只需分配给int:

#include <stdio.h>

int main(void)
{
char a;
do{
    printf("Enter an uppercase alphabet: ");
    scanf(" %c", &a);

} while(a < 'A' || a > 'Z');

for(int i=1;i<=1;i++)
{
  if(a=='A')
    printf("Alphabet number is 1");
  else if(a=='B')
    printf("Alphabet number is 2"); //and so on

}

您可以使用标准的C函数strchr。比如说

int letter = a - 'A' + 1
Enter an uppercase alphabet: Z
The alphabet number of the character Z is 26
要减少函数strchr的调用次数,可以再引入一个const char*类型的变量。比如说

int letter = a - 'A' + 1
Enter an uppercase alphabet: Z
The alphabet number of the character Z is 26

您可以使用标准的C函数strchr。比如说

int letter = a - 'A' + 1
Enter an uppercase alphabet: Z
The alphabet number of the character Z is 26
要减少函数strchr的调用次数,可以再引入一个const char*类型的变量。比如说

int letter = a - 'A' + 1
Enter an uppercase alphabet: Z
The alphabet number of the character Z is 26

我将进一步介绍@Tarik的答案

ASCII是现代字符编码的标准

与之前的一些编码不同,这种编码将每个字母的26个拉丁字母字符按顺序排列在一起。因此,“A”有一个数值,“B”有一个比“A”高的值,“C”有一个比“B”高的值,依此类推。“a”也是如此z',尽管它们的数值不同

因此,您可以使用简单的数学表达式对基本拉丁字符进行许多非常快速的处理。例如,大写字母和小写字母相差一位,因此可以通过切换该位在它们之间切换

当然,您可以利用sequential numeric range属性来计算一个表达式,该表达式生成您想要的数字

具体地说,如果您将字符视为整数类型,但您应该添加一个强制转换来向读者说明您在做什么,您会发现:

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

int main(void) 
{
    const char *alphabet =
    {
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    };

    char c;
    const char *p;

    do
    {
        printf( "Enter an uppercase alphabet: " );
        scanf( " %c", &c );
    } while ( ( p = strchr( alphabet, c ) ) == NULL );

    printf( "The alphabet number of the character %c is %d\n",
            c, ( int )( p - alphabet ) + 1 );

    return 0;
}
这意味着您可以通过在表达式中添加一个字母来获得字母的序号:

'0' - '0' == 0
'9' - '0' == 9

'A' - 'A' == 0
'Z' - 'A' == 25

'a' - 'a' == 0
'z' - 'a' == 25

'a' > 'A' (counterintuitive!)
'A' > '0'

我将进一步介绍@Tarik的答案

ASCII是现代字符编码的标准

与之前的一些编码不同,这种编码将每个字母的26个拉丁字母字符按顺序排列在一起。因此,“A”有一个数值,“B”有一个比“A”高的值,“C”有一个比“B”高的值,依此类推。“a”也是如此z',尽管它们的数值不同

因此,您可以使用简单的数学表达式对基本拉丁字符进行许多非常快速的处理。例如,大写字母和小写字母相差一位,因此可以通过切换该位在它们之间切换

当然,您可以利用sequential numeric range属性来计算一个表达式,该表达式生成您想要的数字

具体地说,如果您将字符视为整数类型,但您应该添加一个强制转换来向读者说明您在做什么,您会发现:

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

int main(void) 
{
    const char *alphabet =
    {
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    };

    char c;
    const char *p;

    do
    {
        printf( "Enter an uppercase alphabet: " );
        scanf( " %c", &c );
    } while ( ( p = strchr( alphabet, c ) ) == NULL );

    printf( "The alphabet number of the character %c is %d\n",
            c, ( int )( p - alphabet ) + 1 );

    return 0;
}
这意味着您可以通过在表达式中添加一个字母来获得字母的序号:

'0' - '0' == 0
'9' - '0' == 9

'A' - 'A' == 0
'Z' - 'A' == 25

'a' - 'a' == 0
'z' - 'a' == 25

'a' > 'A' (counterintuitive!)
'A' > '0'

不要兜圈子;使用数学。提示:a实际上是如何工作的?如果将a分配给int,会发生什么?检查a在ASCII表中的位置并进行计算。不要循环;使用数学。提示:a实际上是如何工作的?如果将a指定给int,会发生什么情况?请检查a在ASCII表中的位置并进行计算。@令人震惊的是,这是一种错误的方法,因为在EBCDIC编码中,字符之间没有空格是不必要的。@DavidC.Rankin fixed!谢谢只要它仅限于ASCII,它就可以正常工作。但这一点值得注意。EBCDIC在字符中间抛出标点符号。@ AgHAST这是一个错误的方法,因为在EBCDIC编码中,字符不必相互跟随而没有GAPS.davidC.RANKIN固定!谢谢只要它仅限于ASCII,它就可以正常工作。但这一点值得注意。EBCDIC在字符中间抛出标点符号。