как я могу проверить, что txt-файл содержит входную переменную в c ++ [duplicate]

Попробуйте это

db.collection.update( { _id : ObjectId("57315ba4846dd82425ca2408")}, { $pull: {"myarray.userId": ObjectId("570ca5e48dbe673802c2d035")}} ) db.collection.update( { _id : ObjectId("57315ba4846dd82425ca2408")}, { $push: {"myarray": { userId:ObjectId("570ca5e48dbe673802c2d035"), point: 10 }} )

31
задан LogicStuff 19 June 2015 в 11:46
поделиться

4 ответа

53
ответ дан Nathan 4 September 2018 в 10:37
поделиться

Это может зависеть, особенно от того, будет ли ваш файл иметь одинаковое количество элементов в каждой строке или нет. Если это так, то вам, вероятно, нужен 2D-матричный класс, обычно что-то вроде этого:

class array2D { 
    std::vector<double> data;
    size_t columns;
public:
    array2D(size_t x, size_t y) : columns(x), data(x*y) {}

    double &operator(size_t x, size_t y) {
       return data[y*columns+x];
    }
};

Обратите внимание, что, как написано, предполагается, что вы знаете размер, который вам нужен , Этого можно избежать, но код становится немного больше и сложнее.

В любом случае, чтобы читать номера и поддерживать исходную структуру, вы обычно читаете строку за раз в строку , затем используйте строковый поток для чтения чисел из строки. Это позволяет хранить данные из каждой строки в отдельной строке в вашем массиве.

Если вы не знаете размер раньше времени или (особенно), если разные строки могут не все содержать одинаковое количество numbers:

11 12 13
23 34 56 78

Вместо этого вы можете использовать std::vector<std::vector<double> >. Это накладывает некоторые накладные расходы, но если разные строки могут иметь разные размеры, это простой способ выполнить задание.

std::vector<std::vector<double> > numbers;

std::string temp;

while (std::getline(infile, temp)) {
    std::istringstream buffer(temp);
    std::vector<double> line((std::istream_iterator<double>(buffer)),
                             std::istream_iterator<double>());

    numbers.push_back(line);
}

... или с помощью современного (C ++ 11) компилятора, вы можете использовать скобки для инициализации line:

    std::vector<double> line{std::istream_iterator<double>(buffer),
                             std::istream_iterator<double>()};
9
ответ дан Jerry Coffin 4 September 2018 в 10:37
поделиться

вы можете читать и писать отдельно, как и другие. Но если вы хотите записать в одно и то же, вы можете попробовать:

#include <iostream>
#include <fstream>

using namespace std;

int main() {

    double data[size of your data];

    std::ifstream input("file.txt");

    for (int i = 0; i < size of your data; i++) {
        input >> data[i];
        std::cout<< data[i]<<std::endl;
        }

}
0
ответ дан Mike22LFC 4 September 2018 в 10:37
поделиться

Оператор ввода для числа пропускает ведущие пробелы, поэтому вы можете просто прочитать число в цикле:

while (myfile >> a)
{
    // ...
}
7
ответ дан Some programmer dude 4 September 2018 в 10:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: