-2

我创建了一个 .txt 文件,其中包含产品名称、描述和数量的列表。例如,像:

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

我想将这些信息分配给三个变量,即string name,string 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;
}

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

4

2 回答 2

0

您可以考虑getline()使用哪个分隔符:

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

请注意,您可能必须像以前那样删除descriptionand 开头的空格。或者,您也可以选择在循环块的末尾添加,以确保在执行 nex getline 之前删除数量后面的最后一个换行符。name>>product.ignore(INT_MAX, '\n');

于 2014-12-06T14:38:00.333 回答
0

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

您需要一次阅读一行

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

并使用 . 查找逗号std::string::find并提取您需要的部分std::string::substr

于 2014-12-06T14:44:31.663 回答