【问题标题】:Split a line (string) into more strings将一行(字符串)拆分为多个字符串
【发布时间】:2016-10-12 10:48:07
【问题描述】:

编辑代码和问题

我想将一个字符串(从 .txt 文件中读取的行)拆分为更多字符串:

1 REP615624/1 BYZ12345 90 12.516 20.709

我想放 1在位 零件编号中的 REPxxx BYZxxx 在 byz 90转 12xxx 在 x 20xxx 在 y 依此类推(20.709 以 \n 结束,还有其他行)

我在 C++ 中使用过

std::ifstream leggiROF(nomeFileTxt.c_str());    // apre in lettura il file ROF.txt
while(!leggiROF.eof())                          // finché non raggiunge la fine del file
{
    getline(leggiROF, posizione, ' ');          // legge la riga fino allo spazio e mette contenuto in posizione
    getline(leggiROF, partNumber, ' ');         // legge la riga fino allo spazio e mette contenuto in part number
    getline(leggiROF, byz, ' ');                // legge la riga fino allo spazio e mette contenuto in byz
    getline(leggiROF, rotazione, ' ');          // legge la riga fino allo spazio e mette contenuto in rotazione
    getline(leggiROF, x, ' ');                  // legge la riga fino allo spazio e mette contenuto in coordinata x
    getline(leggiROF, y, '\n');                 // legge la riga fino allo '\n' e mette contenuto in coordinata y
} // end while

leggiROF.close();

我想在 QT 中转换它。我在努力

void fileTxt::setContaRigheFileTxt(Ui::Dialog *ui)
{
    fileName = QFileDialog::getOpenFileName(0, QObject::tr("Apri File"),
                                                "C:\\Users\\Massimo Di Natale\\Documents\\Programmi C++ 11\\Programmi_QT\\Ericsson",
                                                QObject::tr("File ROF (R*.txt)")
if (!fileName.isEmpty())                        // se non è vuoto
    {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly))
        {
                QMessageBox::critical(0, QObject::tr("Errore"), QObject::tr("Non posso aprire questo file"));
                return;
        } // end if
        QTextStream in(&file);                      // legge il file .txt
        while(!in.atEnd())                          // finchè non raggiunge la fine del file
        {
                ui->textEdit->append(in.readLine());

                /* WANT TO PUT each part before ' ' in a different string */
                // pos=.....
                // pNumb=...
                // ecc...
                /*                                                        */

        } // end while
        file.close();                               // chiude il file aperto per la lettura
    } // end if
}

但不知道怎么做

【问题讨论】:

标签: c++ split qt5


【解决方案1】:

不知道这是否回答了您的问题,但它是我用于在 C++ 中拆分字符串的拆分函数:

//Split string -- reusable
vector<string> splitString(string str, string delimiter)
{
  vector<string>v;
  string token;
  size_t pos = 0;

  while((pos = str.find(delimiter)) != string::npos)
    {
      token = str.substr(0, pos);
      v.push_back(token);
      str.erase(0, str.find(delimiter) + delimiter.length());
    }
  v.push_back(str);
  return v;
}

【讨论】:

    【解决方案2】:

    使用istringstream(C++11 及更高版本)进行拆分

    vector<string> split(const string & s)
    {
        vector<string> tokens, t;
        istringstream in {s};
        while (in >> t) {
           tokens.push_back(t);
        }
        return tokens;
    }
    

    或者使用来自 Boost 的东西 http://www.cplusplus.com/faq/sequences/strings/split/

    【讨论】:

      【解决方案3】:

      您可以在循环中使用右移运算符(&gt;&gt;):

      fstream file("file.txt");
      string position, partNumber, byz, rotation, x, y;
      while (file >> position >> partNumber >> byz >> rotation >> x >> y) {
          // do work
      }
      

      【讨论】:

        【解决方案4】:

        解决了修改While循环

        while(!in.atEnd())                          // finchè non raggiunge la fine del file
            {
                //ui->textEdit->append(in.readLine() + "elab TXT");
                QString line=in.readLine();
                QStringList list=line.split(" ");
        
                posizione=list[0];          // legge la riga fino allo spazio e mette contenuto in posizione
                partNumber=list[1];         // legge la riga fino allo spazio e mette contenuto in part number
                byz=list[2];                // legge la riga fino allo spazio e mette contenuto in byz
                rotazione=list[3];          // legge la riga fino allo spazio e mette contenuto in rotazione
                x=list[4];                  // legge la riga fino allo spazio e mette contenuto in coordinata x
                y=list[5];                 // legge la riga fino allo '\n' e mette contenuto in coordinata y
            } // end while
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-18
          • 1970-01-01
          • 2011-06-14
          • 2021-01-30
          • 2014-02-26
          • 1970-01-01
          • 2013-05-28
          相关资源
          最近更新 更多