QStringクラスを理解するための演習として、単純なQtBencodeパーサーを作成しています 。
私の現在のアプローチでは、スキャナーのように動作するBencodeオブジェクトを作成し、文字列ポインター(pos
)を段階的に進めることで解析します。その結果、次のようなコードになります( bEncoded
Bencode QString)。
void Bencode::parseInteger() {
qDebug() << "Parsing an Integer";
if(bEncoded.at(pos) != intChar) {
qDebug() << "No leading i for integer";
return;
}
pos++;
QString buf;
if(bEncoded.at(pos).isNumber() || bEncoded.at(pos) == negChar) {
buf.append(bEncoded.at(pos));
pos++;
}
while(bEncoded.at(pos).isNumber()) {
buf.append(bEncoded.at(pos));
pos++;
}
if(!bEncoded.at(pos).unicode() == 'e') {
qDebug() << "No training e for integer";
return;
}
pos++;
qDebug("Integer: %i", buf.toInt());
}
これは簡潔なアプローチかどうか疑問に思います。私が虐待QString::at()
しているようですQChar==
。私がそれを見ると、正規表現はもっと簡潔になるかもしれないと思いますが、ここでもいくつかの意見を求めると思いました。
では、このアプローチをどのように改善できるでしょうか。
ここにあるすべてのコード:https ://github.com/jif/Bencode