저는 여전히 C ++ 초보자이며이 문제에 대한 해결책을 찾기 위해 고군분투하고 있습니다. 다음 형식의 여러 줄이있는 파일이 있습니다.
[문자] [더블] [더블]
예 :
p 100 0.80
r 50 50
p 20 4.8
r -100 25
줄 번호의 이름을 사용하여 Complex 클래스의 개체에 이러한 줄을 저장하고 싶습니다.
class Complex {
private:
int name;
char type;
double a;
double b;
public:
Complex(int name, char type, int x, int y);
char gettype();
double geta();
double getb();
};
또한 사용자 지정 생성자를 사용하여 만들고 싶습니다.
Complex::Complex(int name, char type, int x, int y){ //All data stored in standard form
if (type = 'p'){
a = x*cos(y);
b = x*sin(y);
}
else if (type = 'r'){
a = x;
b = y;
}
else{
std::cout << "Error" << std::endl;
a = 0;
b = 0;
}
}
문자열을 double과 char로 나눌 수 있지만 정보를 저장하는 데 어려움을 겪고 있습니다. 처음에는 루프를 사용하여 동적으로 이름을 지정할 수 있다고 생각했지만 C ++에서는 클래스 인스턴스를 동적으로 만들 수 없다고 들었습니다. 그런 다음 배열 생성을 살펴 보았지만 다른 솔루션은 이것이 기본 생성자를 사용하여 수행되어야한다고 말했습니다. 얼마나 많은 줄이 있을지 모르고 내 생성자를 사용하여이 정보를 저장할 수있는 방법이 있습니까? 또한 생성자에서 생성 된 a와 b의 값이 객체에 저장됩니까?
이를 처리하는 가장 간단한 방법은 데이터를 std :: vector에 저장하고 문자열을받는 생성자를 사용하여 입력 줄을 적절한 값으로 분할하는 것입니다.
Complex::Complex(int line_no, std::string const& input)
{
... Construct complex object using functionality you already know/have ...
}
...
// Process the file
std::ifstream input("inputfile.data");
int line_no = 1;
while (input.is_open() && input.good() && !input.eof())
{
std::string line;
std::getline(input, line);
complex_vector.push_back(Complex(line_no, line));
++line_no;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다