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