Не удается отфильтровать вектор строки при написании txt-файла на C

#c #string #vector #readfile #writefile

Вопрос:

Я хочу прочитать текстовый файл, содержащий как текст, так и число, и после его прочтения записать некоторые данные из этого файла в новый текстовый файл, содержащий только последние 3 числа каждой строки. Если есть текст «120, Привет, привет», я хочу пропустить его и написать только последние 3 цифры после «Привет» и ввести новую строку после написания этих 3 цифр. Здесь я использую строковый вектор для его чтения, но не могу получить формат, в который хочу писать. Как я могу записать его в нужный мне формат? Любая помощь будет признательна.

Входной текстовый файл:»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;
}
 

Комментарии:

1. (VecData[i]!="120")||(VecData[i]!="Hello") так всегда true .

2. Измените if((VecData[i]!="120")||(VecData[i]!="Hello")||(VecData[i]!="Hi")){ на if((VecData[i]!="120")amp;amp;(VecData[i]!="Hello")amp;amp;(VecData[i]!="Hi")){ , чтобы исправить логику.

3. проблема решена. Большое спасибо!

Ответ №1:

Проблема здесь в том , что вы проверяете , что VecData[i] это не "120" так, или это не "Hello" так, или это не "Hi" так . Так будет всегда true .

Подумайте о случае VecData[i] , когда "Hi" :

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

Сравнение at (1) было оценено как Истинное, так "Hi" != "120" как .

Что вам следует сделать, так это проверить, что это не «120», И это не «Привет», И это не «Привет», вот так:

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

Комментарии:

1. проблема решена. Большое спасибо!