我的代码用ifstream读取一个文件并解析它,现在我改变了一些东西,而且我不需要读取该文件,原因是从另一个地方读取的,所以我有一个char * ifstream ...我怎么能改变我的代码,我使用ifstream.get()? 再次感谢C++ ifstream to char *
回答
您只需将您的char *
放入std::stringstream
即可。
std::stringstream buffer(your_string);
然后可以使用buffer
几乎就像是一个std::ifstream
(您不能打开或关闭)。理想情况下,你的解析法将采取的std::istream
作为参数的引用,那么就不会介意什么样的输入流接收:
void parse(std::istream & input);
因为从std::istream
都std::ifstream
和std::stringstream
继承,你可以通过它们作为参数,并且您的解析器无需修改即可运行。
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
void mung(istream & is) {
char c;
while(is >> c) {
cout << c << endl;
}
}
int main(int argc, char *argv[]) {
if (argc > 1) {
ifstream ifs(argv[1]);
mung(ifs);
}
else {
istringstream iss("here is some text to mung");
mung(iss);
}
}
正如其他人所说,你可以使用std::istringstream
,但在这种情况下, 我宁愿不推荐使用的(但总是存在)std::istrstream
。或者干脆 创建一个简单的memory_streambuf
,与imemorystream
和 的omemorystream
:如果你不需要是双向的,也不支持 寻求的memory_streambuf
是代码不到10行,总是 有用的,并且留下了很多其他解决方案的复杂性。 (如果你只是在做这一次,当然,使用现有的解决方案 是首选,但我发现memory_streambuf
在 是有用的一些案件。)
作为利益的问题,为什么偏好istrstream? – 2011-05-11 08:09:20
@unaperson简单。也许习惯,在某种程度上,但是如果他有'char []'(由'char *'指向),那么'istrstream'可以直接使用它; 'istringstream'将需要转换为'string'。没什么大不了的,如果'istrstream'不可用,我会使用'istringstream',但既然是这样,为什么不使用可以完全满足你需要的流。 (对于输出,差异更加显着,因为当输出太多字符时,ostrstream将停止并声明错误。) – 2011-05-11 08:40:43
- 1. C++ LPCTSTR to char *
- 2. vb.net byte [] to C++ char *
- 3. C++:无法从'std :: ifstream'转换为'char *'
- 4. Casting to unsigned char in C
- 5. Casting void * to char * in C
- 6. char * string to hex arrary in C
- 7. C++ ifstream I/O?
- 8. C++ ifstream类错误
- 9. Python to C/C++ const char问题
- 10. ifstream二进制读/写只需要char *?
- 11. fstream to const char *
- 12. Cast void * to char *
- 13. String.Replace char to string
- 14. const char * to LPTSTR
- 15. CString to char *
- 16. KeyEventArgs.Key to char
- 17. Const Char to LPTSTR
- 18. ifstream - > ofstream C++
- 19. const char * to int cast?
- 20. C++从ifstream的
- 21. C++ - 从ifstream的
- 22. CharacterSet to String和Int to Char铸造
- 23. 在C++中使用ifstream的
- 24. C++ ifstream字符串
- 25. C++ ifstream/fstream损坏数据
- 26. C++堆和ifstream阅读函数
- 27. Fast ByteBuffer to CharBuffer or char []
- 28. Arduino unsigned long int to char *
- 29. char to UTF code in vbscript
- 30. NSString * to Char [](GameCenter Send Struct)
为什么'stringstream',和不是'istringstream'?为什么他似乎并不需要额外的复杂性? – 2011-05-11 07:55:21
@詹姆斯:好点。我认为,即使“ostringstream”或“istringstream”就足够了,总是使用'stringstream'是我的一个坏习惯。 – 2011-05-11 07:56:59
谢谢牛仔!工作正常,我没有改变太多我的代码! – ghiboz 2011-05-11 08:21:29