首页 > 解决方案 > 我们可以将字符数组转换为 int 数组吗?

问题描述

我正在解决这个问题。问题陈述说我必须打印奇数索引整数和偶数索引整数之和之间的差异。例如:

输入:4567

预期产出:2

我写了这段代码,但是在输入之后它既不打印也不退出。

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


int main()
{
    char num[100];
    int i,j,len = 0;
    int diff = 0;
    
    int s_even =0,s_odd = 0;

    scanf("%s",num);
    len = strlen(num);
    
    for(i=0;i<len;i+2)
    {
        s_even+=int(num[i]);
        s_odd+= int(num[i+1]);
    }
    diff = s_even - s_odd;
    printf("%d",diff);
    return 0;
}

我很好奇 char 字符串是否会进行算术加法。而且,我可以像在最后一个for循环中那样对它进行类型转换吗?请给我建议。

谢谢

标签: arrayscstringcasting

解决方案


对于初学者来说,呈现的代码既不是 C 代码也不是 C++ 代码。

例如在 C++ 中,你应该使用看起来像

#include <cstdio>
#include <cstdlib>
#include <cstring>

另一方面,在 C 中没有像这样的函数转换

s_even+=int(num[i]);

此外,这没有多大意义。

在这个 for 循环中

for(i=0;i<len;i+2)

变量i没有被改变。所以循环可以是无限的。

也不需要调用字符串函数strlen

AC程序至少可以看如下方式

#include <stdio.h>

int main( void )
{
    char num[100];
    num[0] = '\0';
    
    scanf( "%99s", num );

    int s_even = 0, s_odd = 0;
    
    for( size_t i = 0; num[i] != '\0'; i++ )
    {
        if ( '0' <= num[i] && num[i] <= '9' )
        {
            if ( i % 2 == 0 )
            {
                s_even += num[i] - '0';
            }
            else
            {
                s_odd += num[i] - '0';
            }
        }
    }

    printf( "The difference is equal to %d\n", s_odd - s_even );
    
    return 0;
}

如果要输入字符序列

4567

那么程序输出看起来像

The difference is equal to 2

推荐阅读