Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在字符串列表中的所有项目中查找公共部分?_C++_Qt - Fatal编程技术网

C++ 如何在字符串列表中的所有项目中查找公共部分?

C++ 如何在字符串列表中的所有项目中查找公共部分?,c++,qt,C++,Qt,我有一个保存文件名的QStringList。找到它们的共同根的正确方法是什么,即它们的共同左半部分 我在C++上写的,使用Qt. < P>这里是一个算法: 将第一个字符串作为根 对于列表中的每个项目 如果根长于项 根(项.length()) 对于根中的每个索引i 如果根[i]与项不匹配[i] 根(i) 编辑:一些我没有测试过但“应该”可以工作的代码 c++03代码: QString find_root(const QStringList& list) { QS

我有一个保存文件名的QStringList。找到它们的共同根的正确方法是什么,即它们的共同左半部分

我在C++上写的,使用Qt.</P> < P>这里是一个算法:

  • 将第一个字符串作为根
  • 对于列表中的每个项目
    • 如果长于
      • 根(.length())
    • 对于根中的每个索引i
      • 如果根[i]与项不匹配[i]
        • 根(i
编辑:一些我没有测试过但“应该”可以工作的代码

c++03代码:

QString find_root(const QStringList& list)
{
    QString root = list.front();
    for(QStringList::const_iterator it = list.begin(); it != list.end(); ++it)
    {
        if (root.length() > it->length())
        {
            root.truncate(it->length());
        }

        for(int i = 0; i < root.length(); ++i)
        {
            if (root.at(i) != it->at(i))
            {
                root.truncate(i);
                break;
            }
        }
    }

    return root;
}
QString查找根目录(常量QStringList&list)
{
QString root=list.front();
for(QStringList::const_迭代器it=list.begin();it!=list.end();+it)
{
if(root.length()>it->length())
{
root.truncate(it->length());
}
对于(int i=0;iat(i))
{
截根(i);
打破
}
}
}
返回根;
}
c++11代码:

QString find_root(const QStringList& list)
{
    QString root = list.front();
    for(const auto& item : list)
    {
        if (root.length() > item.length())
        {
            root.truncate(item.length());
        }

        for(int i = 0; i < root.length(); ++i)
        {
            if (root[i] != item[i])
            {
                root.truncate(i);
                break;
            }
        }
    }

    return root;
}
QString查找根目录(常量QStringList&list)
{
QString root=list.front();
用于(常量自动和项目:列表)
{
if(root.length()>item.length())
{
root.truncate(item.length());
}
对于(int i=0;i
以下是一个算法:

  • 将第一个字符串作为根
  • 对于列表中的每个项目
    • 如果长于
      • 根(.length())
    • 对于根中的每个索引i
      • 如果根[i]与项不匹配[i]
        • 根(i
编辑:一些我没有测试过但“应该”可以工作的代码

c++03代码:

QString find_root(const QStringList& list)
{
    QString root = list.front();
    for(QStringList::const_iterator it = list.begin(); it != list.end(); ++it)
    {
        if (root.length() > it->length())
        {
            root.truncate(it->length());
        }

        for(int i = 0; i < root.length(); ++i)
        {
            if (root.at(i) != it->at(i))
            {
                root.truncate(i);
                break;
            }
        }
    }

    return root;
}
QString查找根目录(常量QStringList&list)
{
QString root=list.front();
for(QStringList::const_迭代器it=list.begin();it!=list.end();+it)
{
if(root.length()>it->length())
{
root.truncate(it->length());
}
对于(int i=0;iat(i))
{
截根(i);
打破
}
}
}
返回根;
}
c++11代码:

QString find_root(const QStringList& list)
{
    QString root = list.front();
    for(const auto& item : list)
    {
        if (root.length() > item.length())
        {
            root.truncate(item.length());
        }

        for(int i = 0; i < root.length(); ++i)
        {
            if (root[i] != item[i])
            {
                root.truncate(i);
                break;
            }
        }
    }

    return root;
}
QString查找根目录(常量QStringList&list)
{
QString root=list.front();
用于(常量自动和项目:列表)
{
if(root.length()>item.length())
{
root.truncate(item.length());
}
对于(int i=0;i
遍历QStringList,比较根和每个字符串:

QString root(QString &a, QString &b)
{
    QString str;

    for(int i = 0; i < a.length() && i < b.length(); ++i) {
        if(a.at(i) == b.at(i))str.push_back(a.at(i));
        else break;
    }
    return str;
}

QString dosth(QStringList &list)
{
    QString str;
    if(list.isEmpty()) return str;
    for(int i = 0; i < list.length(); ++i) {
        str = root(str, list.at(i));
    }
    return str;
}
QString根目录(QString&a、QString&b)
{
QString-str;
对于(int i=0;i
遍历QStringList,比较根和每个字符串:

QString root(QString &a, QString &b)
{
    QString str;

    for(int i = 0; i < a.length() && i < b.length(); ++i) {
        if(a.at(i) == b.at(i))str.push_back(a.at(i));
        else break;
    }
    return str;
}

QString dosth(QStringList &list)
{
    QString str;
    if(list.isEmpty()) return str;
    for(int i = 0; i < list.length(); ++i) {
        str = root(str, list.at(i));
    }
    return str;
}
QString根目录(QString&a、QString&b)
{
QString-str;
对于(int i=0;i
没有现成的解决方案,但编写新代码只需5分钟:

int commonBeginingLength(常量字符串&a、常量字符串&b){
int maxLen=qMin(a.length(),b.length());
int i=0;

对于(int i=0;i没有现成的解决方案,但编写新代码只需5分钟:

int commonBeginingLength(常量字符串&a、常量字符串&b){
int maxLen=qMin(a.length(),b.length());
int i=0;

对于(int i=0;i)所有字符串是否都包含相同的根?对于大多数情况,它们都会很好,如果没有呢?您想找到哪个“根”?所有字符串是否都包含相同的根?对于大多数情况,它们都会很好,如果没有呢?哪个“根”你想找到吗?这对我不起作用。我必须做一个小改动。在for循环之前的
dosth
中:
str=list[0];if(list.size()=1)返回str;
并将foor循环变量从
i=0
更改为
i=1
。此外,由于列表未修改,因此在这两个函数中,我都将参数更改为
const
。这对我不起作用。我必须做一个小的更改。在
dosth
中,for循环之前:
str list=0];if(list.size()=1)返回str;
并将foor循环变量从
i=0
更改为
i=1
。此外,由于列表没有修改,因此在这两个函数中,我都将参数更改为
const
。我喜欢优雅!注意,在开始实际工作之前,这首先会冗余地遍历整个第一个字符串。我喜欢优雅!