在用 C++ 编写 txt 文件时无法过滤掉字符串向量

Can't filter out string vector in writing txt file in C++

我想读取一个包含文本和数字的文本文件,读取后,将该文件中的一些数据写入一个新的文本文件,该文件仅包含每行的最后 3 个数字。如果有“120,你好,嗨”的文字,我想跳过它只写“嗨”后的最后3个数字,写完这3个数字后换行。 这里我是用string vector读取的,但是获取不到我要写入的格式。我怎样才能把它写成我想要的格式? 任何帮助将不胜感激。

输入文本文件:mytext.txt

120

你好

嗨 55 66 44

嗨 1 2 3

嗨 11 22 33

你好 111 222 333

想要格式:“mynewtext.txt”

55 66 44

1 2 3

11 22 33

111 222 333

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
    vector<string> VecData;
    string data;

    ifstream in("mytext.txt");

    while (in >> data) {
        VecData.push_back(data);
    }
    in.close();

    ofstream mynewfile1("mynewtext.txt");
    for (int i = 0; i < VecData.size(); i++) {
        if ((VecData[i] != "120") || (VecData[i] != "Hello") || (VecData[i] != "Hi")) {
            mynewfile1 << VecData[i] << " ";
        }
    }

    mynewfile1.close();

    return 0;
}

这里的问题是您正在检查 VecData[i] 不是 "120",或者不是 "Hello",或者不是 "Hi"。这将始终是 true.

想想 VecData[i]"Hi" 的情况:

if ((VecData[i] != "120") ||     // (1)
    (VecData[i] != "Hello") ||
    (VecData[i] != "Hi"))

(1) 处的比较结果为真,因为 "Hi" != "120"

您应该做的是检查它不是“120”,不是“Hello”,也不是“Hi”,就像这样:

if ((VecData[i] != "120") &&
    (VecData[i] != "Hello") &&
    (VecData[i] != "Hi"))