2014-10-03 71 views
0

我想检测和同一行股票价值忽略逗号逗号后面。股票价值从C++中的文件

我试图函数getline的3个参数,但没有奏效。 我也试过迭代器,一样。

我的文本文件包含以下值:

Bob Jackson,25,Sick 
Eric Smith,99,Deceased 
Alice Vanderlend,16,Healthy 

在下面的代码,我把我的意见不能尝试...

string str,fn, ln, age, sta; 
    ifstream input("text.txt"); 


    while (getline(input, str)) 
    { 
     /*for (string::iterator it=str.begin(); it!=str.end(); ++it) 
     { 
      if ((*it) == ','){continue;}; 
     }*/ 

     //string vir; 
     istringstream iss(str); 

     //if(!(getline(input, vir, ','))){break;} 

     iss >> fn >> ln >> age >> sta; 

     cout 
     << "First Name: " << fn 
     << "\nLast Name: " << ln 
     << "\nAge: " << age 
     << "\nStatus: " << sta << endl << endl; 

    } 

有望获得输出IM是

First Name: Bob 
Last Name: Jackson 
Age: 25 
Status: Sick 
... 

相反,我得到:

First Name: Bob 
Last Name: Jackson,25,Sick 
Age: 
Status: 
... 

如何忽略逗号股票的未来价值?

回答

1

您可以将它发送到std::stringstream前空格替换字符串中的所有逗号:

std::replace(str.begin(), str.end(), ',', ' '); 
+0

我收到错误消息:“error:'replace'不是'std'的成员 std :: replace(str.begin(),str.end(),',','');” 我错过了什么吗? (需要声明一个库?) – 2014-10-03 02:49:58

+2

@LordRixuel您需要的#include'' +1 – 0x499602D2 2014-10-03 02:52:13

+0

方便初学者比我张贴,但学习如何做这样的事情是值得长期... – 2014-10-03 02:54:24

2

声明一个虚拟变量如下:

char comma; 

,并宣读了额外的逗号:

iss >> fn >> ln >> comma>> age >> comma >> sta; 

而不是

iss >> fn >> ln >> age >> sta; 
+0

问题是“Jackson,25,Sick”会被解析成ln ???来不及得到一个逗号...... – 2014-10-03 02:51:12

+0

它可能是一个很好的临时解决方案,但不是所有的线路都会一样。有些将不会有逗号,有些会带逗号和空格。 – 2014-10-03 02:51:16

+0

@LordRixuel jeez - 应该在问题中提出这样的细节! – 2014-10-03 02:55:53

0

只需更改年龄为int反正...假设这是对您更方便以后,它的解析将在逗号停下来,但你必须明确地处理姓串...

char c; 
if (iss >> fn && std::getline(iss, ln, ',') && iss >> age >> c >> sta && c == ',') 
    ...parsed ok - use vars... 
else 
    throw std::runtime_error("invalid input"); 
0

更换识别代码与此

iss>>fn; 
getline(iss,ln, ','); 
getline(iss,age, ','); 
getline(iss,sta, ','); 

是第三个参数给函数getline是分隔符。