由于您使用的是 C++,因此您应该使用该语言为您提供的功能,而不是使用 C 风格的代码。很高兴您决定使用std::vector
so continue 并std::string
用于存储字符串、std::istringstream
创建输入流,您将从中读取令牌并std::getline
实际检索这些令牌。
首先,使用访问说明符 public
使类的属性在elemente
此类范围之外可用,并将类型更改name
为std::string
:
class elemente
{
public:
std::string name;
// ...
};
然后从行中检索令牌可能如下所示:
#include <iostream>
#include <vector>
#include <sstream>
...
std::vector<elemente> elements;
std::string line("this is my input line");
std::istringstream lineStream(line);
for (std::string word; std::getline(lineStream, word, ' '); )
{
if (!word.empty())
{
elements.push_back(elemente());
elements.back().name = word;
}
}
要测试此代码,您可以打印存储在此向量元素中的所有名称:
std::vector<elemente>::iterator e;
for(e = elements.begin(); e != elements.end(); ++e)
std::cout << e->name << ".";
输出:
this.is.my.input.line.
或者,您可以创建类的公共构造函数,以便可以使用正确初始化的成员构造元素:
class elemente
{
public:
elemente(const std::string& s) : name(s){ }
// ...
std::string name;
// ...
};
然后对令牌的解析将变为:
for (std::string word; std::getline(lineStream, word, ' '); )
{
if (!word.empty())
elements.push_back(elemente(word));
}
希望这可以帮助 :)