[英]How to read string from file with line break using ifstream c++?
[英]How to use ifstream of C++ to read from a file using length of the data rather than new line?
不管ifstream >>在找到換行符時終止讀取文件,我都希望使用數據大小從文件中讀取。 有沒有辦法做到這一點?
目前我使用mystream.read(字符串,長度),但我想使用“>>”運算符而不是read。
.read
是你要做的事情的方式。
想要用operator>>
代替它並沒有多大意義,這根本就沒有做到這一點。
只需使用.read
,然后繼續。
更新要么,或者我誤解了你的問題,Kris是對的。
像這樣的東西? 這將它讀入std :: vector。
inline void util::operator>>(const std::string &address, std::vector<std::string> &v) throw()
{
std::ifstream fin;
fin.open(address.c_str());
for(std::string s; std::getline(fin, s, '\n'); ) {
v.push_back(s);}
}
雖然,這是我5年前寫的一些舊代碼。 不確定這是否是最佳做法,但也許可能有幫助? 如果我誤解了,請忽略我:)
operator >>只接受一個參數 - 對目標的引用。 如果不能在某個地方傳遞長度,你真的沒有選擇,只能使用.read()方法。
也許你可以覆蓋operator >>並傳入一個你自己的特殊類來嵌入一個長度參數。
這似乎只是使用>>語法的很多工作。
那么,如果語法不會讓您感到困惑,請考慮以下內容:
char g_buf[MAX_BUFFER_LEN];
// The operator>> does not stop reading until it hits the end of file or the data read equals to specified cnt
istream& operator>>(istream& in, int cnt)
{
return in.getline(g_buf, cnt, char(6));
}
int main()
{
ifstream in("e:/a.txt");
// Reads 200 chars from file and put them in g_buf
in>>200;
cout<<g_buf<<endl;
in.close();
}
如果您真的只想讓客戶端代碼使用operator>>
,您可以編寫一個使用中間類型調用.read()
的運算符。
class Buffer
{
char * myData;
std::size_t mySize;
public:
Buffer ( char * data, std::size_t size )
: myData(data), mySize(size)
{}
friend operator>> ( std::istream& stream, Buffer& buffer )
{
return stream.read(buffer.myData, buffer.mySize);
}
};
這允許你寫:
static const std::size_t size = 100;
char data[size];
std::cin >> Buffer(data, size);
如果您知道要讀取具有已知長度的多個零件,這可能非常有用,例如:
static const std::size_t header_size = 5;
static const std::size_t stream_size = 20;
static const std::size_t footer_size = 12;
char header[header_size];
char stream[stream_size];
char footer[footer_size];
std::cin >> Buffer(header, header_size)
>> Buffer(stream, stream_size)
>> Buffer(footer, footer_size);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.