我想请教你的小学校项目。 任务是确定一个人的性别(使用2个单选按钮),然后选择一个随机的日本姓氏和男/女中间名。还有剩下的任务,但与这部分相比没有什么:( 事实上,我已设法使3 .txt文件(familynames.txt,malemiddlenames.txt和femalemiddlenames.txt)如下所示: 1,Akiro 2,樱花 3,等...
我想要做的是创建一个随机数,并读取这些行,直到它到达与我的随机数相同的数字的行,然后删除数字和逗号,并在相应的标签。到目前为止,这就是我所拥有的:
void MainWindow::famname()
{
QString familyname;
int famrand =qrand() % 76;
ui->label_2->setText(QString::number(famrand));
int i = 1;
QFile famfile("C:\Users\Ryseth\gyakorlas\_familynames.txt");
QTextStream in(&famfile);
if(famfile.open(QIODevice::ReadOnly)){
while (!in.atEnd()) {
QString line = in.readLine();
i++;
if(i==famrand){
QStringList line2 =line.split(',');
familyname = line2.at(0);
ui->label_2->setText(QString::number(famrand)+" "+QString::number(i));
ui->FamilyLabel->setText(familyname);
}//IF
}//WHILE
}//IF
famfile.close();
}//NGEN
如果您有任何人想到某种解决方案,或者您有任何建议,请不要随便与我分享:D
谢谢你,祝你有个美好的一天/晚上:鲁本
答案 0 :(得分:1)
我认为使用Boost :: Spirit :: Qi,您可以将文件解析为std::vector< std::string >
并使用简单的c ++方法进行操作。
但是为了帮助您使用Qt-Solution:
你永远不会检查int famrand =qrand() % 76;
是否产生合法号码,你的文本文件中是否有足够的条目......
int i = 1;
这个整数是不必要的,数字在文本文件中......
我的解决方案(未经测试):
while (!in.atEnd()) {
QString line = in.readLine();
QStringList list = line.split(",", QString::SkipEmptyParts);
bool ok;
int idx = list.at(0).toInt(&ok);
if (ok && idx == famrand) {
familyname = list.at(1).trimmed();
// ... do with your ui whatever you want
}//IF
}//WHILE
请记住,如果将string转换为int失败和/或list throw(list.at(xx)
)的访问者
积极的是,你不需要有序的文本文件!
答案 1 :(得分:0)
我真的不明白你要做什么,但在这一行,我猜你得到的是数字,而不是姓氏。
familyname = line2.at(0); // number
familyname = line2.at(1); // family name