我有一个包含文件名的 QStringList。找到它们的公共(public)根,即它们的公共(public)左部分的正确方法是什么?
我正在用 C++ 编写并使用 Qt。
最佳答案
这是一个算法:
- 将第一个字符串作为根。
- 对于列表中的每个项目
编辑:一些我没有测试过但“应该”有效的代码。
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/