Trong chương trình C++, tôi có một số mã để in một đối tượng của một lớp được gọi là phân số. Các biến của nó là n (tử số), d (mẫu số) và sinal (tín hiệu: true khi một phân số dương và sai).iomanip với đối tượng của một lớp
ostream &operator << (ostream &os, const fraction &x){//n=0
if(!x.sinal)
os << "-";
os << x.n;
if(x.d!=1 && x.n!=0)
os << "/" << x.d;
return os;
}
Nó làm một công việc tốt, nhưng khi tôi cố gắng sử dụng một setw() trong nó, nó không hoạt động đúng cách: nó chỉ ảnh hưởng đến mục đầu tiên được in (cho dù đó là những tín hiệu hoặc tử số).
tôi đã cố gắng để thay đổi nó và giải pháp tôi tìm thấy là người đầu tiên chuyển đổi nó thành một chuỗi và sau đó sử dụng os với một iomanip:
ostream &operator << (ostream &os, const fraction &x){//n=0
string xd, xn;
stringstream ssn;
ssn << x.n;
ssn >> xn;
stringstream ssd;
ssd << x.d;
ssd >> xd;
string sfra = "";
if(!x.sinal)
sfra += "-";
sfra += xn;
if(x.d !=1 && x.n != 0){
sfra += "/";
sfra += xd;
}
os << setw (7) << left << sfra;
return os;
}
này hoạt động, nhưng rõ ràng là tôi không thể thay đổi chiều rộng mà một phần sẽ có: nó sẽ là 7 cho tất cả chúng. Có cách nào để thay đổi điều đó không? Tôi thực sự cần phải sử dụng độ rộng khác nhau cho các phân số khác nhau. Cảm ơn trước.
Điều này thật tuyệt vời! Cảm ơn nhiều. – ahgert