Как свести список строк, содержащих круглые скобки, в один список? - PullRequest
0 голосов
/ 23 сентября 2018

Как я могу разобрать этот список строк в один список, содержащий только расширения, как показано в примере ниже?Я использую список Qt / C ++

для анализа:

QStringList = [
     "Image files (*.png *.xpm *.jpg)",
     "Text files (*.txt)",
     "Any files (*)"
];

требуемый результат:

QStringList = ["*.png", "*.xpm", "*.jpg", "*.txt", "*"]

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Решение

В Qt можно было бы использовать функциональность, предоставляемую QString , чтобы удалить текст за скобками, включая сами скобки, разбив остальную часть текста.в сегменты, разделенные пробелами, например:

foreach (const QString &str, fileTypes)
    extensions.append(str.split("(").last().chopped(1).split(" "));

, где fileTypes и extensions - списки входной и выходной строк соответственно.

Пример

Вот рабочаяПример, который я написал для того, чтобы вы могли проверить предложенное решение:

#include <QDebug>

int main(int /*argc*/, char /**argv[]*/)
{
    QStringList fileTypes({
        "Image files (*.png *.xpm *.jpg)",
        "Text files (*.txt)",
        "Any files (*)"
    });
    QStringList extensions;

    foreach (const QString &str, fileTypes)
        extensions.append(str.split("(").last().chopped(1).split(" "));

    qDebug() << extensions;

    return 0;
}

Результат

Как написано, данный пример дает следующий результат:

("*.png", "*.xpm", "*.jpg", "*.txt", "*")
0 голосов
/ 23 сентября 2018

Вы можете попробовать это:

Для каждого элемента QStringList получить содержимое в скобках и разделить его:

QStringList stringList = ["Image files (*.png *.xpm *.jpg)","Text files (*.txt)","Any files (*)"];
QStringList newStringList = [];
for (int i = 0; i < stringList.size(); i++){

    //Get the parentheses
    string element= stringlist.at(i);
    unsigned first = element.find("(");
    unsigned last = element.find(")");
    first++;
    string extensions = element.substr (first,last-first);

    //Split it with the " " as delimiter.
    size_t pos = 0;
    string extension;
    string delimiter = " ";
    while ((pos = extensions.find(delimiter)) != std::string::npos) {
         extension= s.substr(0, pos);
         //Add here extension to your new qstringlist
         newStringList.append(extension);
         std::cout << extension<< std::endl;
         extensions.erase(0, pos + delimiter.length());
    }
}

Вывод:

*.png
*.xmp
*.jpg
*.txt
*

Надеюсь, это работает для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...