0 Câu hỏi: Toán tử đầu vào C ++ nạp chồng với int và std :: string trong 1 dòng

câu hỏi được tạo ra tại Tue, Apr 30, 2019 12:00 AM

Tôi muốn đọc một .csv, lặp qua các dòng và tạo các đối tượng và khởi tạo chúng bằng các toán tử đầu vào. Một dòng trong .csv có thể là: "1; king" luôn ở cùng định dạng. Bây giờ tôi muốn chương trình đọc dòng đầu tiên và sử dụng toán tử đầu vào Character để đặt idname của nhân vật. Làm cách nào tôi có thể sửa đổi chương trình của mình để đạt được điều này?

Nhân vật.h:

#pragma once
#include <iostream>

class Character
{
public:
    Character() {}
    Character(int id, std::string name);

    std::string getName();
private:
    int id;
    std::string name;
    friend std::ostream & operator << (std::ostream &out, const Character &c);
    friend std::istream & operator >> (std::istream &in, Character &c);
};
Phương pháp quá tải

​​Character.cpp:

std::istream &operator>> (std::istream& input, Character& c)
{
    input >> c.id;
    std::string s(std::istreambuf_iterator<char>(input), {});


    return input;
}

Phương thức trình ghi tệp:

std::ifstream file;
file.clear();
file.open("assets/characterCards.csv");

if (file.is_open())
{
    std::string line;

    while (std::getline(file, line)) {
        int pos = line.find(";");
        std::string input = line.replace(pos, 1, "");
        std::stringstream sStream(line);
        Character c;
        sStream >> c;
    }
}

Chỉnh sửa

Tôi đã thử quá tải sau nhưng điều này tạo ra mã lỗi C2679 trên c.name

std::istream &operator>> (std::istream& input, Character& c)
{
    input >> c.id;
    input >> c.name;    

    return input;
}
    
0
  1. Bạn đọc tên của mình đến s, nhưng sau đó bạn loại bỏ nó.
    2019-04-30 08: 37: 12Z
  2. Vì vậy, bạn đang nói việc đặt dòng c.name = s; sau s sẽ là cách sử dụng toán tử đầu vào /đầu ra chính xác?
    2019-04-30 08: 44: 42Z
  3. Tôi muốn thay đổi dấu chấm phẩy thành dấu cách (line[pos] = ' ';), chỉ trong trường hợp tên bắt đầu bằng một chữ số. Các không gian sẽ được bỏ qua sau. Và tại sao bạn không làm chỉ input >> c.name;?
    2019-04-30 08: 45: 10Z
  4. Nhân tiện, bạn có đảm bảo tuyệt đối rằng dấu chấm phẩy tồn tại không? Bạn có thể dựa vào, cá nhân tôi sẽ cảm thấy an toàn hơn nếu bạn kiểm tra pos xem có hợp lệ không - và loại bỏ dòng rõ ràng nếu không.
    2019-04-30 08: 47: 38Z
  5. Tôi tin rằng bạn đang thiếu #include <string>.
    2019-04-30 09: 10: 51Z
0 Câu trả lời                              0                         
nguồn đặt đây