(C ++) - 将字符串与从文件读入的值相关联

时间:2014-02-02 16:05:48

标签: c++

我正在尝试将一个值与一个名为invoice1.txt

的文件中的字符串相关联

invoice1.txt

hammer#10.00
saw#20.00

因此,例如,当我查找“锤子”时,我希望表达式评估为10.00。

到目前为止我的代码

string search;
ifstream inFile;
string line;
double price;

inFile.open("invoice1.txt");

if(!inFile)
{
cout << "Unable to open file" << endl;
return 0;
}
else
{
    int pos;
    while(inFile.good())
    {
        getline(inFile,line);
        pos=line.find(search);
        if(pos!=string::npos)
        {
            cout<<"The item "<<search<<" costs: "// code to get the price
        }
    }
}


system("pause");

这是我的目标:

The item hammer costs: 10.00

暑假,我的问题是:

如何将从文件中读入的值相互关联,这样我就可以获得某个项目的价格而无需重新分析该文件并再次找到它?

2 个答案:

答案 0 :(得分:2)

这是std::map的用途。

您想要做的是将问题分解为多个阶段。这里有一套简单的步骤可以帮助你(有更好的方法,但我想在这里保持简单)。

我已经添加了一些行来解释如何使用std :: map,以防你不熟悉。

  1. 逐行阅读文件。
  2. 对于每个读入的行,获取“#”字符后面的值。
  3. 使用“#”之前的字符串作为键...将值添加到地图中

    priceMap [key] =价格; //例如,这可能会评估为:myMap [“hammer”] = 10.00

  4. 如果您想使用该值,只需将地图设为关键。

    std :: cout&lt;&lt; priceMap [ “锤”];

答案 1 :(得分:1)

你从文件中搜索什么?你必须搜索字符#并将你的字符串分成两部分。

getline(inFile,line);
pos=line.find('#');
if(pos!=string::npos)
   cout<<"The item "<<line.substr(0,pos)<<" costs: " << line.substr(pos+1,line.size()-1) << endl;// code to get the price

如果需要,您可以将项目名称和价格保存在不同的变量中。如果您想使用字符串执行更多操作,请阅读this以获取进一步说明。