关于读取数据的有关问题,C++怎么实现将txt文档中的数据读取到字符串变量中并显示出来

关于读取数据的问题,C++如何实现将txt文档中的数据读取到字符串变量中并显示出来
下面是我的程序,需要每次读取一行数据到字符串变量,然后对字符串按tab位分段,再按“;”分段,并将“,”号前的数据变为double型。
按照我的程序,inData>>str,遇到空格就停止当前读取,然后下一次从下一个数据处开始读,不能做到一次把整行数据读取到字符串变量,这是第一个问题。
第二个问题是,如果能够把整行数据一次行读入到字符串变量中,怎么按照tab位分段。
请各位指点!
下面是程序和一行数据:
#include<iostream>
#include<fstream>
#include<sstream>

using namespace std;

void dostring(const string &s)
{
string a,b;
a=s.substr(0,s.find(","));
istringstream iss(a);
double dou;
iss>>dou;
b=s.substr(s.find(","));
cout<<dou<<b<<endl;
}

int main()
{
char *fileName,*ch;
fileName=new char;
ch=new char;
cout<<"Please input the name of the file:\n";
cin>>fileName;
ifstream inData;
inData.open(fileName,ios::in);
if(!inData)
{
cout<<"File could not be open.\n";
abort();
}
string str,strTemp;
while(!inData.eof())
{
inData>>str;
if(str.find(";")!=-1)
{
while(str.find(";")!=-1)
{
strTemp=str.substr(0,str.find(";")+1);
dostring(strTemp);
str=str.substr(str.find(";")+1);

}
else
cout<<str<<endl;
}
inData.close();
return 0;
}
5143 360.01,0,0 185148 1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0;9,0;10,0;11,0;12,0;13,0;14,0;15,0;16,0;17,0;18,0;19,0;20,0;31,0;32,0;33,0;34,0;35,0;36,0;37,0;38,0;39,0;40,0;41,0;42,0;43,0;44,0;45,0;46,0;47,0;48,0;49,0;50,0;51,0;52,0;53,0;54,0;55,0;56,0;57,0;58,0;59,0;60,0;61,0;62,0;63,0;64,0;65,0;66,0;67,0;68,0;69,0;70,0;71,0;72,0;73,0;74,0;75,0;76,0;77,0;78,0;79,0;80,0;81,08;2,0;83,0;84,08;5,0;86,0;87,0;88,0;89,0;90,0;91,0;92,0;93,0;94,0;95,0;96,0;97,0;98,0;99,0;100,0;101,0;102,0;103,0;104,0;105,0;106,0;107,0;108,0;109,0;110,0;111,0;112,0;113,0;114,0;115,0;116,0;117,0;118,0;119,0;120,0;
这是一行数据,从185148的1开始到1,0;的1前面是个tab位,5143、360.01,0,0和185148之间是tab位,现在的程序读取数据后,这3个数据并不能跟后面的数据一次读取完成,这一行数据需要进行3次inData>>str;
5143
360.01,0,0
185148


------解决方案--------------------
引用:
人工置顶,大神们快来帮忙!

我上面写成了C语言的:
这个是C++的:
你原来程序中的这句:
inData>>str;
换成下面的即可:
getline(inData, str);
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

人工置顶,大神们快来帮忙!

我上面写成了C语言的:
这个是C++的:
你原来程序中的这句:
inData>>str;
换成下面的即可:
getline(inData, str);

非常感谢,请问getline(inData,str)和inData.getline(str,,'\n'),这两个函数有什么区别,为什么inData.getline(str,100,'\n')不能执行。
还有ifstream inData;
 inData.open(fileName,ios::in);和ifstream inData(fileName,ios::in);这两个有什么区别呢,我在输入ios::后,VC会提示有ios::init,没有ios::in,可是使用ios::in在编译的时候就不会出错。

inData.getline(str,100,'\n')这个函数的第一个参数要求是char*型的,你的程序中str是string类型的,类型不同,所以不能用。

这个 inData.open(fileName,ios::in);用的是open函数,相当于定义之后再更改。
这个ifstream inData(fileName,ios::in);用的是构造函数初始化的。
有点类似这个:
int a;
a=10;

int a=10;的区别。但又不完全一样。真正的区别如果要深究,就要看类的实现代码了。这个我没看过,如果有兴趣可以找来看一下。

------解决方案--------------------
可以考虑用istringstream类看看

下面是我曾经写的代码片

fstream Read_node("abc.txt",ios::app
------解决方案--------------------
ios::out);
string temp2;

while(getline(Read_node,temp2))
{
if(temp2!="")
{
istringstream is(temp2);
string t;
is>>t;
if(t=="abc") break;
}
}