我创建了一个.txt文件,其中包含产品名称,描述和数量的列表。 例如,像:
100 Plus , Sports Drink , 12
Sprite , Citrus Drink , 5
Dutch Lady, Milk, 8
我想将这些信息分配给三个变量,即string name
,string description
和int 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 :(得分:0)
您可以考虑getline()
允许使用分隔符:
while ( getline(getline (product, name, ','), description, ',') >> quantity)
请注意,您可能必须删除description
和name
的空白区域,因为>>
之前正在执行此操作。或者,您也可以选择在循环块的末尾添加product.ignore(INT_MAX, '\n');
,以确保在执行nex getline之前删除了数量后面的最后一个换行符。
答案 1 :(得分:0)
您无法使用流>>
运算符,因为您发现它在第一个空格处停止。
您需要使用
一次读取一行std::string line;
std::getline(product, line);
并查找包含std::string::find
的逗号,并使用std::string::substr
提取所需的部分。