C++ 如何在字符串列表中的所有项目中查找公共部分?
我有一个保存文件名的QStringList。找到它们的共同根的正确方法是什么,即它们的共同左半部分C++ 如何在字符串列表中的所有项目中查找公共部分?,c++,qt,C++,Qt,我有一个保存文件名的QStringList。找到它们的共同根的正确方法是什么,即它们的共同左半部分 我在C++上写的,使用Qt. < P>这里是一个算法: 将第一个字符串作为根 对于列表中的每个项目 如果根长于项 根(项.length()) 对于根中的每个索引i 如果根[i]与项不匹配[i] 根(i) 编辑:一些我没有测试过但“应该”可以工作的代码 c++03代码: QString find_root(const QStringList& list) { QS
我在C++上写的,使用Qt.</P> < P>这里是一个算法:
- 将第一个字符串作为根
- 对于列表中的每个项目
- 如果根长于项
- 根(项.length())李>
- 对于根中的每个索引i
- 如果根[i]与项不匹配[i]
- 根(i)李>
- 如果根[i]与项不匹配[i]
- 如果根长于项
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)李>
- 如果根[i]与项不匹配[i]
- 如果根长于项
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
。我喜欢优雅!注意,在开始实际工作之前,这首先会冗余地遍历整个第一个字符串。我喜欢优雅!