正在分析字符串并将令牌作为参数传递
Parsing a string and passing tokens as parameters
我有一个示例文件,其中一行如下:CAR;FORD;FIESTA;WHITE;20300;19900;23555
现在我需要解析这一行,其中前四个属性应该分别存储,最后三个(或更多)需要计算平均值(正在进行"选择正确的方法"…)
当我成功地将其标记化时,我需要将这些标记传递给一个类,该类为每个属性都有一个单独的(公共)变量
class ClassA{ //aggregate class
public:
string vehicle;
string brand;
string model;
string color;
double avgPrice;
//...
};
最合适的方法是什么?
标记时,我应该将所有标记存储在一个数组中,然后传递将数组作为参数,然后将初始化列表添加到
ClassA
构造函数,其中我将每个对应的Arr[n]
分配给属性?或者我应该为每个属性创建一个临时变量然后做标准的初始化列表。但这会使糟糕的笨拙代码,我不得不重复同样的事情4每次将令牌存储在不同的变量中的次数。
请随意提供一个更好的解决方案,因为我只是C++的初学者,我对它的功能的了解是基本的。
对我来说有两种解决方案:
- 您的类解析字符串
- 您的类只接收令牌,解析在前面完成
通常,类的属性必须是私有的,甚至是受保护的。但是在类的外部直接访问这些属性可以避免类控制值的进出。
如果您的类专门用于解析,那么解决方案1对我来说是最好的。否则,更喜欢第二种解决方案:只需解析字符串,并在类的函数(甚至构造函数)中提供字符串向量作为arg。
与其将其作为一个整体任务来解决,不如考虑将其分为两部分:
- 给定一个字符串,获取该字符串表示的令牌集合
- 给定一组令牌,在构造
ClassA
之前验证每个位置
这种分离将ClassA
与读取字符串表示的责任隔离开来。这是一件好事:它允许您稍后更改此字符串表示,而不必更改ClassA
以匹配新的表示。
第一个任务(标记化)可以用一种通用的方式解决:您所需要做的就是从字符串中读取,并将部分存储到集合中。我建议使用std::vector<std::string>
而不是数组,假设您可以使用C++集合来解决这个问题。
第二个任务从令牌列表开始。大多数令牌都作为字符串传递给ClassA
,因此只需将它们传递给使用标准初始化器列表的构造函数即可。最后一个参数需要从string
到double
的额外转换。这应该在ClassA
构造函数之外进行,以保持职责的干净分离。
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 如何将参数传递给正在使用模板的类
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何在C++中使用X509证书模在令牌中查找私钥
- 如何将部分流作为参数传递
- 我正在开发服务器,ip作为参数传递不起作用
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 允许哪些令牌作为 #include 的参数?
- 如何将字符串作为预处理器令牌传递
- 获取错误:在"("令牌之前缺少模板参数
- 3 错误:错误:未在此范围内声明'Entry'。错误:模板参数 1 无效。错误:令牌之前声明中的类型无效'('
- C++ - 令牌之前的预期主表达式'('并且缺少"("标记之前的模板参数
- 正在分析字符串并将令牌作为参数传递
- 可变参数模板上下文中"..."令牌的规则是什么?
- 获取字符串令牌/参数作为解析
- Boost::program_options:带有固定和可变令牌的参数
- C++ 错误:在带有参数的构造函数中'*'令牌之前预期的主表达式
- 令牌的含义是什么"... ..."?即参数包上的双省略号运算符