c++ - 如何找到字符串列表中所有项目的公共(public)部分?

标签 c++ qt

我有一个包含文件名的 QStringList。找到它们的公共(public)根,即它们的公共(public)左部分的正确方法是什么?

我正在用 C++ 编写并使用 Qt。

最佳答案

这是一个算法:

  • 将第一个字符串作为
  • 对于列表中的每个项目
    • 如果 rootitem
    • 对于 root 中的每个索引 i
      • 如果 root [ i ] 不匹配 item [ 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;
}

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;
}

关于c++ - 如何找到字符串列表中所有项目的公共(public)部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616704/

相关文章:

c++ - 调用 XCreateWindow() 时产生 GLX 错误的 XLib

c++ - 在 Visual Studio 2017 Community Edition 上编译 Qt 5.8 报错

c++ - 8位十进制转二进制

c++ - 处理 websocketpp 连接路径

javascript - QML:SequencialAnimation 的运行属性设置为 false,但仍在运行

c++ - 我需要在 Qt 中使用 CryptoPP DLL 吗?

c++ - 为什么 ChangeWindowMessageFilter 会导致 Qt 崩溃?

c++ - 使用 QpushButton 切换显示在 QLabel 中的图像

c++ - ATL Web 服务日志记录

c++ - QListView默认选择模型的所有权