C ++を使用しているため、Cスタイルのコードで苦労するのではなく、この言語が提供する機能を使用する必要があります。文字列の保存、トークンの読み取り元となる入力ストリームの作成、およびこれらのトークンの実際の取得にstd::vector
使用することを決定したのは良いことです。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));
}
お役に立てれば :)