2014-12-06 61 views
-2

我已经创建了一个.txt文件,其中包含产品名称,描述和数量的列表。 例如,如:C++ - 如何将数据从文件分配到多个变量

100 Plus , Sports Drink , 12 Sprite , Citrus Drink , 5 Dutch Lady, Milk, 8

我希望将这些信息分配到三个变量,这是string namestring descriptionint quantity

我曾尝试使用类似while(product >> name >> description >> quantity),但它仅适用如果它只包含单个单词而没有逗号,但不包含多个单词的字符串。

这是我的代码。

#include <string> 
include <fstream> 
include <iostream> 

using namespace std; 

int main() 
{ 
string name, description; 
int quantity; 
fstream product("product.txt"); 

string c_name[5],c_description[5]; 
int c_quantity[5]; 
int i=0; 

while(product >> name >> description >> quantity) 
{ 

    cout<<i<<" Name= "<<name<<", Description= "<< description <<" , Quantity= " <<quantity<<"\n"; 
    c_name[i] = name; 
    c_description[i] = description; 
    c_quantity[i] = quantity; 
    i++; 
} 

cout<<"-------------------------------------------------------------------"<<endl<<endl; 

for(i=0;i<5;i++) //to display the variables 
{ 
    cout<<i+1<<" "<<c_name[i]<<endl; 
    cout<<i+1<<" "<<c_description[i]<<endl; 
    cout<<i+1<<" "<<c_quantity[i]<<endl<<endl; 
} 

product.close(); 
return 0; 
} 

我可以知道我该怎么做? 如果可能的话,我想只坚持一些简单的头文件。 非常感谢。

+0

你需要的是调用“解析”或“标记化”:读一行,然后使用一些算法将它分解成你想要的部分。你的解析并不难,因为你的数据格式使用逗号作为分隔符,我可以建议你看看http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in- C – 2014-12-06 14:05:40

回答

0

您可以考虑getline()这允许分隔符使用:

while (getline(getline (product, name, ','), description, ',') >> quantity) 

要知道,你可能在descriptionname的北宁市删除空格,如>>在之前这样做。或者,您也可以选择在循环块的末尾添加product.ignore(INT_MAX, '\n');,以确保在执行nex getline之前删除数量后面的最后一个换行符。

0

您不能使用流>>运算符,因为您发现它在第一个空白处停止。

您需要在时间

std::string line; 
std::getline(product, line); 

,并认准逗号与std::string::find读取一行,并提取您需要std::string::substr部分。

相关问题