c++ 构造函数 将 1 个字符串参数转换为 3 个属性

c++ Constructor With 1 string parameter into 3 attributes

本文关键字:转换 属性 参数 字符串 构造函数 c++      更新时间:2023-10-16

一些背景故事... 对于我的数据结构和算法中的家庭作业,(早期(我必须创建一个类定义和实现,该类定义和实现对商店项目进行建模,格式为部件号、部门代码和价格。除了一个我似乎无法弄清楚如何开始的构造函数重载之外,我已经完成了大部分工作。
到目前为止我所拥有的样本。

/** Default Construct*/
Item() : Part_Num("------"), Dep_Code("---"), item_Price(0){}
/** First 3Param Constructor*/
Item(std::string partNum, std::string dept, std::string priceStr): 
Part_Num(partNum),Dep_Code(dept), item_Price(stod(priceStr)){}
/** Second 3Param Constructor*/
Item(std::string partNum, std::string dept, double priceD) :
Part_Num(partNum), Dep_Code(dept), item_Price(priceD) {}

我遇到的问题是,我需要创建一个参数构造函数,该构造函数采用字符串,格式为

BN3782 ELE 87.25

并将其拆分为正确的数据成员。我有一个解析的想法,但我不知道如何定义要开始的构造函数。只要朝着正确的方向推动,将不胜感激。这是我的第一篇文章,我不擅长解释,所以如果有人需要任何其他信息,请告诉我。
我试过了

Item(std::string data) : Part_Num(data), Dep_Code(data), item_Price(data){}

但这还没有与我的代码一起使用,我不确定为什么它会......(在另一个论坛上建议(。

编辑:我让它与pm100建议一起工作,这是我为将来遇到相同问题的任何人工作的代码示例。

Item(std::string line) {
item_Data = line;
line = removeSpaces(item_Data);
Part_Num = line.substr(0, 6);
Dep_Code = line.substr(6, 3);
item_Price = stod(line.substr(9));
}

您需要对字段分配进行编码

Item(std::string &valstr)
{
Part_Num = <parsed bit of string>;
Dep_Code = <a different part of the string>;
}

为了完整起见,如果您愿意,您仍然可以使用启动器列表。您只需要在某处进行解析。假设您有一个:

std::string nth_part(int n,std::string s) { ... }

那么你的构造函数可能是

Item(std::string s) :
Part_Num(nth_part(0,s)), Dep_Code(nth_part(1,s)), item_Price(nth_part(2,s)) {}

但是,这将需要您处理字符串 3 次(如果您在构造函数主体中执行此操作,则不需要(。使用初始值设定项列表是一种很好的做法,但并不总是真正得到回报。

Item(std::string data)
{
int i=0;
int counter=0;
std::string temp="";
int len=data.length();
while(i<len)
{
if(data[i]!=' ' && i<len-1)
{
temp+=data[i];
}
else
{
if(counter==0) Part_Num=temp;
else if(counter==1) Dep_Code=temp;
else 
{
temp+=data[i];
item_price=stod(temp);
}
++counter;
temp="";
}     
++i;
}      
}

这将为您提供问题所需的结果,您可以通过运行来检查它。