TBACAMILLE 2018-07-22 12:48 采纳率: 50%
浏览 1490
已结题

怎么样对一个遍历一个不规则字符串数组,找到每列中最长字符串的大小

图片说明如图,数字代表不同的字符串,我想知道用什么方法可遍历以做到找到每一列中最长的字符串的长度。
注意,图只是一种情况,已知字符串数组的行数和每一行对应的列数

  • 写回答

3条回答 默认 最新

  • threenewbee 2018-07-22 13:49
    关注
     // Q695423.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    #include "stdlib.h"
    #include "string.h"
    #include <iostream>
    using namespace std;
    
    struct MyArr
    {
        int len;
        char ** arr;
        MyArr(int n, char * _arr[])
        {
            n = n / (sizeof(char *));
            arr = new char *[n];
            len = n;
            for (int i = 0; i < n; i++) 
                arr[i] = _arr[i];
        }
        ~MyArr()
        {
            delete[] arr;
        }
    };
    
    class ExpendCol
    {
    private:
        int _len;
        int _alen;
        int * _pa;
        void expend(int a)
        {
            int * pp = _pa;
            _pa = new int[a];
            memset(_pa, 0, sizeof(int) * a);
            memcpy(_pa, pp, sizeof(int) * _len);
            delete[] pp;
            _alen = a;
        }
    public:
        ExpendCol()
        {
            _alen = 1;
            _pa = new int[_alen];
            _len = 0;
        }
        ~ExpendCol()
        {
            delete[] _pa;
        }
        void set(int index, int value)
        {
            while (index >= _alen)
            {
                expend(_alen * 2);
            }
            if (_len <= index) _len = index + 1;
            _pa[index] = value;
        }
        int get(int index)
        {
            if (index >= _len) return 0;
            return _pa[index];
        }
        int length()
        {
            return _len;
        }
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char * s1 = "file";
        char * s2 = "edit";
        char * s3 = "view";
        char * s4 = "project";
        char * s5 = "build";
        char * s6 = "debug";
        char * s7 = "team";
        char * s8 = "data";
        char * s9 = "tools";
        char * s10 = "architecture";
        char * a1[] = { s1, s2, s3 };
        char * a2[] = { s4, s5, s6, s7 };
        char * a3[] = { s8, s9 };
        char * a4[] = { s10 };
        MyArr arr[] = { 
            MyArr(sizeof(a1), a1), 
            MyArr(sizeof(a2), a2),
            MyArr(sizeof(a3), a3),
            MyArr(sizeof(a4), a4)
        };
    
        ExpendCol r;
        for (int i = 0; i < sizeof(arr) / sizeof(MyArr); i++)
        {
            for (int j = 0; j < arr[i].len; j++)
            {
                int slen = strlen(arr[i].arr[j]);
                if (r.get(j) < slen) r.set(j, slen);
            }
        }
        for (int i = 0; i < r.length(); i++)
        {
            cout << "col" << i << ":" << r.get(i) << endl;
        }
        return 0;
    }
    
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决