C++中是否有一個像c中的getdelim函數一樣的函數?我想用std :: ifstream對象來處理一個文件,所以我不能在這裏使用getdelim。 任何幫助將不勝感激。 謝謝。有沒有像getdelim是C++的函數?
0
A
回答
4
函數getline,既爲的std :: string免費的功能和字符緩衝區的成員有過載採取了分隔符(BTW getdelim是GNU擴展)
1
如果你可以使用升壓那麼我建議Tokenizer庫。下面的示例使用空格和分號分隔標記化流:
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
#include<algorithm>
int main() {
typedef boost::char_separator<char> Sep;
typedef boost::tokenizer<Sep> Tokenizer;
std::string str("This :is: \n a:: test");
Tokenizer tok(str, Sep(": \n\r\t"));
std::copy(tok.begin(), tok.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
輸出:
This
is
a
test
如果你想標記輸入的內容流也很容易做到:
int main() {
std::ifstream ifs("myfile.txt");
typedef std::istreambuf_iterator<char> StreamIter;
StreamIter file_iter(ifs);
typedef boost::char_separator<char> Sep;
typedef boost::tokenizer<Sep, StreamIter> Tokenizer;
Tokenizer tok(file_iter, StreamIter(), Sep(": \n\r\t"));
std::copy(tok.begin(), tok.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
相關問題
- 1. 在c中有沒有像c()中的clock()函數?
- 2. 沒有析構函數的C++函數
- 3. 沒有匹配函數C++
- 4. 有沒有像返回一個函數?
- 5. 沒有C++ 0x的C++ lambda函數?
- 6. 是否有DLL沒有DLLMain函數?
- 7. C#函數沒有像預期的那樣返回字符串
- 8. c + +沒有匹配的構造函數?
- 9. C++:沒有重載函數的實例?
- 10. 沒有匹配的函數getline C++
- 11. C++ - 沒有匹配的構造函數
- 12. 沒有虛函數的C++接口
- 13. C++沒有匹配的構造函數
- 14. 沒有頭文件的C函數
- 15. 沒有匹配的函數調用C++
- 16. 沒有構造函數的實例C++
- 17. 沒有構造函數的C#類
- 18. C函數沒有參數行爲
- 19. 有沒有像c + + const在c#中?
- 20. 有沒有像C++的Python的StringIO/CStringIO?
- 21. 有沒有C++等價的C++ fesetround()函數?
- 22. 有沒有辦法在C#中掛接託管函數,就像我在C++中的非託管函數一樣?
- 23. 是否有像datedate2這樣的函數?
- 24. 是否有圖像的click()函數?
- 25. 有沒有像樣的Websocket C#實現?
- 26. C有沒有像IDLE(python)的東西?
- 27. 在C#中有沒有像Python的getattr()?
- 28. 有沒有像C中的BinaryWriter?
- 29. C有沒有像PHP ob_start的東西?
- 30. 是否有可能創建一個沒有參數的C varargs函數?
getdelim不完全是一個GNU擴展:我剛剛在http://www.opengroup.org/onlinepubs/9699919799/functions/getline.html – mkluwe 2010-02-12 11:05:32
上發現它是一個開放組規範,感謝info..ya我知道getdelim不是一個標準的C函數,但它只適用於FILE *。 – assassin 2010-02-12 11:11:16
還有一個問題......我如何使用getline函數檢查文件結束? Coz,不推薦使用.eof(),因爲它不會提示eof,直到我嘗試讀取超出eof。 – assassin 2010-02-12 11:16:27