2013-07-12 10 views

回答

0

橫移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; 
} 
+0

這不適合我。我必須做一些小改變。在'dosth'中,在for循環之前:'str = list [0]; if(list.size()== 1)return str;'將foor循環變量從'i = 0'改爲'i = 1'。另外,由於列表沒有被修改,所以在兩個函數中,我將參數改爲'const'。 –

2

下面是一個算法:

  • 拍攝第一字符串作爲
  • 對於在列表中的每個項
    • 如果長於
      • truncateitem .length());
    • 對於每個索引
      • 如果 []不匹配 []

編輯:一些代碼,我沒有測試過,但 「應該」 的工作。

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

沒有準備解決方案,但編寫新代碼僅需5分鐘:

int commonBeginningLength(const QString &a, const QString &b) { 
    int maxLen = qMin(a.length(), b.length()); 
    int i=0; 
    for(int i=0; i<maxLen; ++i) 
     if (a.at(i)!=b.at(i)) 
      break; 
    return i; 
} 

QString comonBegining(const QStringList &list) { 
    if (list.isEmpty()) 
     return QString(); 
    QString result(list.front()); 
    for(int i=1; i<list.count(); ++i) { 
     result = result.left(commonBeginningLength(result, list.at(i))); 
    } 
    return result; 
} 
相關問題