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日
  • 展开全部

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改