A154383 2022-05-10 12:15 采纳率: 60%
浏览 64
已结题

如何将纯数字字符型数组转换为四个一组整形数组?

下面是源代码,但是有好多bug,但是实在找不到

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int max(a, b)
{
    if (a > b) return a;
    else return b;
}
int min(a, b)
{
    if (a < b) return a;
    else return b;
}
void tidy(char* s1, char* s2,int *s1_4,int *s2_4,int j1,int j2)
{
    
    int i;
    j1 = j2 = 0;
    //转换为4位整数组
    for (i = 0; i < 100; i += 4)
    {
        s1_4[j1] = ((int)s1[i] - 48) * 1000 + ((int)s1[i + 1] - 48) * 100 + ((int)s1[i + 2] - 48) * 10 + ((int)s1[i + 3] - 48);
        if (s1_4[j1] == 0)
            break;
        j1++;
    }
    for (i = 0; i < 100; i += 4)
    {
        s2_4[j2] = ((int)s2[i] - 48) * 1000 + ((int)s2[i + 1] - 48) * 100 + ((int)s2[i + 2] - 48) * 10 + ((int)s2[i + 3] - 48);
        if (s1_4[j1] == 0)
            break;
        j2++;
    }
    //数组反序,实现数位对齐
    int start = 0, end1 = j1, end2 = j2;
    int temp;
    while (start < end1)
    {
        temp = s1_4[end1];
        s1_4[end1] = s1_4[start];
        s1_4[start] = temp;
        start++;
        end1--;

    }
    start = 0;
    while (start < end2)
    {
        temp = s1_4[end1];
        s1_4[end1] = s1_4[start];
        s1_4[start] = temp;
        start++;
        end1--;

    }
    
}
void main()
{
    int j1 = 0, j2 = 0;
    int s1_4[25], s2_4[25];
    int i;
    char s1[100], s2[100];
    memset(s1, '0', sizeof(s1));
    memset(s2, '0', sizeof(s2));
    printf("输入两个大整数,回车结束:");
    gets(s1);
    gets(s2);
    tidy(s1, s2, s1_4, s2_4, j1, j2);
    printf("\nresult:\n");
    for (i = 0; i < j1; i++)
    {
        printf("%d", s1_4[i]);
    }
    printf("\n");
    for (i = 0; i < j2; i++)
    {
        printf("%d", s2_4[i]);
    }
}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 浪客 2022-05-10 13:02
    关注
    
    void tidy(char *s, int *s_4, int *j)  //按4位转换成整数,对齐没看明白。
    {
        int i;
        *j = 0;
        //转换为4位整数组
        int len = strlen(s);
        for(i = 0; i < len; i++)
        {
            s_4[*j] = s_4[*j] * 10 + (s[i] - '0');
    
            if((i+1) % 4 == 0)
                (*j)++;
        }
        if(s_4[*j]!=0)(*j)++;
    }
    
    int main()
    {
        int i, j1 = 0, j2 = 0;
        int s1_4[25]= {0}, s2_4[25]= {0};
        char s1[100]= {0}, s2[100]= {0};
        //memset(s1, '0', sizeof(s1));
        //memset(s2, '0', sizeof(s2));
        printf("输入两个大整数,回车结束:\n");
        gets(s1);
        gets(s2);
        //tidy2(s1, s2, s1_4, s2_4, &j1, &j2);//参数在函数里修改后把值带回来,需要用指针。
        tidy(s1, s1_4, &j1);
        tidy(s2, s2_4, &j2);
        printf("\nresult:\n");
    
        for(i = 0; i < j1; i++)
        {
            printf("%d ", s1_4[i]);
        }
    
        printf("\n");
    
        for(i = 0; i < j2; i++)
        {
            printf("%d ", s2_4[i]);
        }
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月11日
  • 已采纳回答 5月10日
  • 修改了问题 5月10日
  • 赞助了问题酬金5元 5月10日
  • 展开全部

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答