C++ 逐行读取QString的最佳方法

C++ 逐行读取QString的最佳方法,c++,qt,qstring,C++,Qt,Qstring,我想为c++中的qstring创建一个grep函数(如bash中的grep)。所以我需要一个循环,在这里我可以逐行读取QString。最好的方法是什么?您是否必须逐字检查QString并测试是\n发生还是有更简单/更快/更短的方法 QString Text = "Line1\nLine2\n"; Loop { std::cout << Line.toStdString() << std::endl; } 来自@thuga和@drescherjm的想法 Q

我想为c++中的qstring创建一个grep函数(如bash中的grep)。所以我需要一个循环,在这里我可以逐行读取QString。最好的方法是什么?您是否必须逐字检查QString并测试是\n发生还是有更简单/更快/更短的方法

QString Text = "Line1\nLine2\n";
Loop {
    std::cout << Line.toStdString() << std::endl;
}

来自@thuga和@drescherjm的想法

    QString TXT="l1\nl2\nl3\nl4", Line;
    QTextStream stream(&TXT);

    while (stream.readLineInto(&Line)) {
        std::cout <<Line.toStdString() << std::endl;
    }
    //Set the device to pos 0
    stream.seek(0);



一种方法是使用
QString::split()
。知道什么更快吗?你可以试着测量一下,看看哪个执行得更快。我同意benchmark来解决这个问题。请注意,您可能需要将字符串设置得更大才能确定这一点(因为对于这样一个小的示例,结果将花费非常少的时间)。还要确保启用了优化。我见过这样的情况,VisualStudio的调试模式的执行时间是发布模式的100倍。
    QString TXT="l1\nl2\nl3\nl4", Line;
    QTextStream stream(&TXT);

    while (stream.readLineInto(&Line)) {
        std::cout <<Line.toStdString() << std::endl;
    }
    //Set the device to pos 0
    stream.seek(0);


l1
l2
l3
l4
    QString TXT="l1\nl2\nl3\nl4";
    QStringList Lines = TXT.split('\n');
    for (int i = 0; i < Lines.size(); i++) {
        std::cout <<Lines[i].toStdString() << std::endl;
    }
l1
l2
l3
l4