在 C++ 中拆分字符串

spliting string in C++

我想知道如何在整数之前拆分字符串。可能吗? 我写了一个转换器,可以从旧的 txt 文件下载数据,对其进行编辑,然后将其以新的形式保存在新的 txt 文件中。

例如旧文件如下所示:

新行中的所有数据。 转换后的新文件应如下所示:

意味着整数之后的所有数据都应该在一个新的不同的行中。

我的代码包含在下面。现在我有一个字符串作为 buf,没有任何白色符号:

我想按照示例中的方式拆分它。

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main () {

    string fileName;

    cout << "Enter the name of the file to open: ";
    cin >> fileName;

    ifstream old_file(fileName + ".txt");
    ofstream new_file("ksiazka_adresowa_nowy_format.txt");

    vector <string> friendsData;
    string buf;
    string data;

    while(getline(old_file, data)) {
        friendsData.push_back(data);
    }
    for(int i=0; i<friendsData.size() ; ++i) {
        buf+=friendsData[i] + '|';
    }
    new_file << buf;

    old_file.close();
    new_file.close();

    return 0;
}

您可以尝试将当前字符串解析为 int std::stoi;如果成功,您可以在 buf 中添加一个换行符。这并没有完全拆分字符串,但是当您将它发送到您的文件时会产生您正在寻找的效果,并且可以很容易地调整以实际切割字符串并将其发送到一个向量。

for(int i=0; i<friendsData.size() ; ++i) {
    try {
      //check to see if this is a number - if it is, add a newline
      stoi(friendsData[i]);
      buf += "\n";
    } catch (invalid_argument e) { /*it wasn't a number*/ }
    buf+=friendsData[i] + '|';
}

(此外,我确定您已经从其他人那里听说过,但是 you shouldn't be using namespace std