C++输入输出流的数据流动?重定向实现?
大概我想实现一个这样的过程:BOOLInitDavaFromString(CStringstr){strstreamstrs;strs<<str;strs>>m_1>>m...
大概我想实现一个这样的过程:
BOOL InitDavaFromString(CString str)
{
strstream strs;
strs<<str;
strs>>m_1>>m_2>>m_3;//这个地方是错误的
//我想改写成下面的
/*
istrstream in_str;
in_str<<str;
ostrstream out_str;
//这个地方怎么做才能实现in_str流中数据转给out_str流??
//在前面用in_str.rdbuf(out_str.rdbuf())进行重定向貌似也不行啊!
out_str>>m_1>>m_2>>m_3;
*/
if(m_1==""||m_2==""||m_3=="")
return false;
return true;
}
回答一楼,你貌似没看清楚我说的问题!我用这个方法,主要是应用了ostrstream中可以使用空格控制输出,从而打到连续输出的技巧out_str>>m_1>>m_2>>m_3,这个要是在C中还得进行字符串分割才能实现的!我急事想练习这个技巧才用的! 展开
BOOL InitDavaFromString(CString str)
{
strstream strs;
strs<<str;
strs>>m_1>>m_2>>m_3;//这个地方是错误的
//我想改写成下面的
/*
istrstream in_str;
in_str<<str;
ostrstream out_str;
//这个地方怎么做才能实现in_str流中数据转给out_str流??
//在前面用in_str.rdbuf(out_str.rdbuf())进行重定向貌似也不行啊!
out_str>>m_1>>m_2>>m_3;
*/
if(m_1==""||m_2==""||m_3=="")
return false;
return true;
}
回答一楼,你貌似没看清楚我说的问题!我用这个方法,主要是应用了ostrstream中可以使用空格控制输出,从而打到连续输出的技巧out_str>>m_1>>m_2>>m_3,这个要是在C中还得进行字符串分割才能实现的!我急事想练习这个技巧才用的! 展开
展开全部
对于strsteam流不是很清楚,但对于文件流是很明确的,因此我对你的程序有以下你问。
对于文件流,需要使用ostream流向文件中写入数据,然后再使用istream流把文件中的数据输入给程序中的变量,这样才能正确。你的程序中没有文件,那么我问你,语句strstream strs; strs<<str;把str中的内容输出到哪里去了呢?输出到流中?控制台中?流中的信息被存储了吗?如果没有被存储那么这个数据就会消失,这样的话当然读不到str中的内容了。对于文件流可以按下面方法来使用,可能对于strstream流应该也是同样的道理吧。
ostream hy("hyong.txt"); //打开文件,并向文件中写入内容。
hy<<str; //把str的内容写入到文件hyong.txt中
hy.close() //写入完毕,关闭文件。
istream hy1("hyong.txt"); //打开刚才写入的文件,以便输出。
hy1>>m_1; //把hyong.txt中的内容存入到变量m_1中。
希望对你有所帮助 strstream流没研究过,但原理我觉得差不多,都应该把输出的内容保存在某一个地方,然后才能从这个地方把保存的内容在读入到程序中吧。
对于文件流,需要使用ostream流向文件中写入数据,然后再使用istream流把文件中的数据输入给程序中的变量,这样才能正确。你的程序中没有文件,那么我问你,语句strstream strs; strs<<str;把str中的内容输出到哪里去了呢?输出到流中?控制台中?流中的信息被存储了吗?如果没有被存储那么这个数据就会消失,这样的话当然读不到str中的内容了。对于文件流可以按下面方法来使用,可能对于strstream流应该也是同样的道理吧。
ostream hy("hyong.txt"); //打开文件,并向文件中写入内容。
hy<<str; //把str的内容写入到文件hyong.txt中
hy.close() //写入完毕,关闭文件。
istream hy1("hyong.txt"); //打开刚才写入的文件,以便输出。
hy1>>m_1; //把hyong.txt中的内容存入到变量m_1中。
希望对你有所帮助 strstream流没研究过,但原理我觉得差不多,都应该把输出的内容保存在某一个地方,然后才能从这个地方把保存的内容在读入到程序中吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strstream 已经过时了,而且不太安全,C++标准不建议使用此库
更方便更安全的替代是 stringstream,这是 C++ 标准库推荐的。
头文件是 <sstream>
示例程序如下:
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
string m_1, m_2, m_3;
bool InitDavaFromString(const char *str){
istringstream is(str);
is >> m_1 >> m_2 >> m_3;
if(!is || m_1=="" || m_2=="" || m_3=="")
return false;
return true;
}
int main(){
if(InitDavaFromString("This is a test...")){
cout << m_1 << '\n' << m_2 << '\n' << m_3 << endl;
}
cout.put('\n');
if(InitDavaFromString("123 + 321 = 666")){
cout << m_1 << '\n' << m_2 << '\n' << m_3 << endl;
}
cout.put('\n');
if(InitDavaFromString(" Last Line ...")){
cout << m_1 << '\n' << m_2 << '\n' << m_3 << endl;
}
cout.put('\n');
system("pause");
}
另外,楼主对流的方向搞反了。 ostringstream 是从程序向流输出用的
如:
ostringstream os;
os << "123";
要从流中读入数据应该使用是 istringstream,如上面程序中所示。
更方便更安全的替代是 stringstream,这是 C++ 标准库推荐的。
头文件是 <sstream>
示例程序如下:
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
string m_1, m_2, m_3;
bool InitDavaFromString(const char *str){
istringstream is(str);
is >> m_1 >> m_2 >> m_3;
if(!is || m_1=="" || m_2=="" || m_3=="")
return false;
return true;
}
int main(){
if(InitDavaFromString("This is a test...")){
cout << m_1 << '\n' << m_2 << '\n' << m_3 << endl;
}
cout.put('\n');
if(InitDavaFromString("123 + 321 = 666")){
cout << m_1 << '\n' << m_2 << '\n' << m_3 << endl;
}
cout.put('\n');
if(InitDavaFromString(" Last Line ...")){
cout << m_1 << '\n' << m_2 << '\n' << m_3 << endl;
}
cout.put('\n');
system("pause");
}
另外,楼主对流的方向搞反了。 ostringstream 是从程序向流输出用的
如:
ostringstream os;
os << "123";
要从流中读入数据应该使用是 istringstream,如上面程序中所示。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询