当前位置:网站首页>QT item table new column name setting requirement exercise (find the number and maximum value of the array disappear)

QT item table new column name setting requirement exercise (find the number and maximum value of the array disappear)

2022-07-07 03:41:00 Program yuan ZCC

QT Project practice needs :

Insert the program column forward and backward or set the name of the new column : If it has been deleted before, first find the missing column in the middle add to , Otherwise, find the maximum , The name can also be modified at any time 、 repeatable , Various situations of project analysis are as follows :

For example, next : Find the maximum , A new column is created The name is show 5

  For example, next : Find the minimum value missing in the middle , A new column is created The name is show 2

 

For example, next : A new column is created The name is show 1 ( show 1ss Do not conform to the show ”+ Numbers )

  Main code :

QVector<ProgramCol*> programColList;// Store column array 
class ProgramCol{
   int programId = 0;// show id
   int m_col = 0;//  Column 
   string m_name =" show ";// Program name 
}


// Insert 、 New column  col Pass the new position 
int ProgramManagement::insertProgramCol(int col)
{
     int len = programColList.size();
     int index = 0;
     for (int n = 0; n < len; n++) {
        if(programColList[n]->m_col == col ){
            programColList[n]->m_col+=1;
            index = n;
        }else if(programColList[n]->m_col > col){
            programColList[n]->m_col+=1;
        }
     }

     int id = getMaxProgramColId();
     id ++;
     int nameIndex = findColNameIndex();

     ProgramBaseAttr* info = new ProgramBaseAttr();
     info->programId = id;
     info->m_col = col;
     info->m_name = " show " + to_string(nameIndex);
     programColList.insert(index,info);


     qDebug()<< "programColList col== " << col<<nameIndex;
    return nameIndex;
}

bool ProgramManagement::isNum(string str)
{
    stringstream sin(str);
    double d;
    char c;
    if(!(sin >> d))
    {
        /* explain :
            sin>>t Express the sin convert to double The variable of ( In fact, for int and float Type will receive ),
             If the conversion is successful , Then the value is non 0, If the conversion is unsuccessful, it returns 0
        */
        return false;
    }
    if (sin >> c)
    {
        /* explain :
         This part is used to detect wrong input , The input form of numbers plus strings ( for example :34.f), In the upper part (sin>>t)
         The digital part of the input has been received and converted , stay stringstream The corresponding part will also be removed ,
         What I'm receiving at this time is .f This part , So the condition holds , return false
          */
        return false;
    }
    return true;
}

// Find the missing number in the array 
vector<int> ProgramManagement::findDisappearedNumbers(vector<int>& num)
{
    vector<int>res;
    if(num.size() == 0) return res;
    sort(num.begin(),num.end());
    num.erase(unique(num.begin(), num.end()), num.end());     //unique The return value is the starting position of the repeating element 

    vector<int>::iterator it;
    for(int j=1;j<=num[num.size()-1];j++)
    {
        it=find(num.begin(),num.end(),j);
        if(it==num.end())
        {
            res.push_back(j);
        }
    }

    for(int i=0;i<res.size();i++)
    {
        cout<<res[i]<<endl;
    }
    return res;
}

//  The program line is inserted forward and backward 、 New column : If it has been deleted before, first find the missing column in the middle   add to , Otherwise, find the maximum ( Can't take   Find the missing value assigned to id, If you change your name before, it will repeat ,  show id Still looking id Maximum +1)
int ProgramManagement::findColNameIndex()
{
    vector<int> nums = {};
    for(int i = 0;i<programColList.size();i++) {
        string name1 = programColList[i]->m_name.substr(0, 6);// Intercept the beginning  " show "
        qDebug() << "name1==== " << QString::fromStdString(name1);
        if(name1 == " show ") {
            string name2 = programColList[i]->m_name.substr(6);// Intercept " show " after 
            qDebug() << "name2==== " << QString::fromStdString(name2);

            if(isNum(name2) && (name2.substr(0, 1) != "0"))// Judge as a number and   Don't to 0 start 
            {
                int numA = atoi(name2.c_str());//string  Turn into int

                qDebug() << " The string is converted to int  Greater than 0  also   Does not start with 0  Add array  === =" << numA;
                if(numA > 0) {
                   nums.push_back(numA);
                }
            }
        }
    }

    qDebug() << "nums size == " << nums.size();

    int nameIndex = 1;
    if(nums.size() > 0) { // I haven't changed my name   accord with “ show ”+ Numbers   The array is greater than 0  Find missing . =0  Have been changed, do not meet the name  nameIndex It's directly equal to 1
        vector<int> l = findDisappearedNumbers(nums);
        qDebug() << "l size == " << l.size();
        if(l.size() > 0) {
            // Find the missing number  nameIndex Equal to the first term 
            nameIndex = l[0];
        } else {
            // No missing found   Just look for   Name array   Maximum +1 ,( Program name 、 The order can be changed , look for col  forbid )
            vector<int>::iterator itMax = max_element(nums.begin(), nums.end());
            nameIndex = *itMax + 1;
        }
    }

    qDebug() << "nameIndex== " << nameIndex;
    return nameIndex;
}


int ProgramManagement::getMaxProgramColId() {
    int maxid = 0;
    foreach(auto scr, programColList)
    {
        if(scr->programId > maxid)
        {
            maxid = scr->programId;
        }
    }
    return maxid;
}

原网站

版权声明
本文为[Program yuan ZCC]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207062028310828.html