2014-12-06 35 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部分。

相關問題