1

我想请你帮忙完成我的小学校项目。任务是确定一个人的性别(使用 2 个单选按钮),然后选择一个随机的日本姓氏和男性/女性中间名。还有剩下的任务,但与这部分相比没什么:(事情是,我已经设法使 3 个 .txt 文件(familynames.txt、malemiddlenames.txt 和 femalemiddlenames.txt)如下所示:1、 Akiro 2,Sakura 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

谢谢,祝你有美好的一天/晚上:鲁本

4

2 回答 2

1

我认为使用 Boost::Spirit::Qi 您可以将文件解析为 astd::vector< std::string >并使用简单的 c++ 方法进行操作。

但是为了帮助您使用 Qt 解决方案:

您永远不会检查是否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))的访问器,您必须进行错误处理

积极的是,您不需要有序的文本文件!

于 2013-07-20T11:35:55.030 回答
0

我真的不明白你在做什么,但在这一行我猜你得到的是号码,而不是姓氏。

familyname = line2.at(0); // number
familyname = line2.at(1); // family name
于 2013-07-20T11:34:14.423 回答