易语言吧 关注:266,589贴子:1,664,991
  • 9回复贴,共1

数组求和计算方法求教

只看楼主收藏回复

{“710009$0”,“710010$300”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”,“710009$0”,“710010$600”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”,“710009$0”,“710010$20”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”,“710009$0”,“710010$200”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”}
上面是一串数组,上面仅为格式展示,真实数组成员数不固定,现在需要对$前面相同的数据将对应后面的数据相加,比如运算后的结果:710009$0,710010$1120,710017$0,710033$0,220003$0,710078$0,710123$0
不论数组有多少,自动按照上面的格式进行计算结果,求解。谢谢


IP属地:四川1楼2020-11-03 11:47回复
    这种很简单呀,先用json将数据解析出来。然后循环用分割文本命令取出数据1和数据2。然后计算结果就可以了


    IP属地:重庆来自Android客户端2楼2020-11-03 12:27
    收起回复
      采用模式匹配的方式,匹配(\d*?[^\d]\d*?[^\d])模式后,添加到数组,执行添加操作时,如果数组中已经存在相同前缀,则仅在当前数组项目累加其后缀,否则全部添加到数组。
      #include <stdio.h>
      #include <stdlib.h>
      #include <ctype.h>
      int main()
      {
      char *str =
      "{“710009$0”,“710010$300”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”,“710009$0”,“710010$600”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”,“710009$0”,“710010$20”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”,“710009$0”,“710010$200”,“710017$0”,“710033$0”,“220003$0”,“710078$0”,“710123$0”}";
      int n, m, i, exist;
      int top = 0;
      int max = 2;
      int *base, *arr = calloc(max, sizeof(*arr) * 2);
      while (*str)
      {
      while (*str && !isdigit(*str)) {str++;}
      if (!*str)
      {
      break;
      }
      sscanf(str, "%d", &n);
      while (isdigit(*str++)) {}
      sscanf(str, "%d", &m);
      while (isdigit(*str)) {str++;}
      for (i = 0, exist = 0; i < top; i++)
      {
      base = arr + i * 2;
      if (base[0] == n)
      {
      base[1] += m;
      exist = 1;
      break;
      }
      }
      if (!exist)
      {
      if (top == max)
      {
      arr = realloc(arr, sizeof(*arr) * 2 * (max *= 2));
      }
      base = arr + top++ * 2;
      base[0] = n;
      base[1] = m;
      }
      }
      for (i = 0; i < top; i++)
      {
      base = arr + i * 2;
      printf("%d$%d", base[0], base[1]);
      if (i + 1 != top)
      {
      putchar(',');
      }
      }
      return 0;
      }


      IP属地:浙江来自Android客户端3楼2020-11-03 14:28
      收起回复
        先弄个循环提取前面6个字符 不重复的就加入新数组 然后弄个循环 用新数组的成员 查找文本匹配原数组 提取后面的值 然后相加 输出


        IP属地:湖南来自Android客户端4楼2020-11-03 15:47
        回复

          这样子运行结果是错的呢。


          IP属地:四川7楼2020-11-04 16:32
          回复
            逐个分割加入新数组 取新数组成员数逐个想加


            IP属地:山东来自Android客户端8楼2020-11-06 22:09
            回复