文字列「SplitAtSpaces」を、「Split」「At」「Spaces」を含むベクトルに分割する関数を作成しようとしています。これまでのところ、これは私が持っているコードです。
#include <iostream>
#include <utility>
#include <algorithm>
using namespace std;
std::vector<std::string> split(std::string * s, char * tosplit)
{
size_t i = 0;
int count = 0;
size_t contain;
std::vector<std::string> split;
std::cout << "Start" << std::endl;
std::cout << *s << std::endl;
std::cout << *tosplit << std::endl;
while((contain = s->find(*tosplit,i)) != std::string::npos)
{
count++;
i = contain + 1;
}
std::cout << "Contains " << count << std::endl;
if (count == 0)
{
std::cout << "Equals 0" << std::endl;
split = std::vector<std::string>(1);
split.at(0) = s->c_str();
return split;
}
split = std::vector<std::string>(count + 1);
split.begin();
int lasti;
i = s->find_first_of(*tosplit);
split.at(0) = s->substr(0, i);
lasti = i;
int runs = 1;
while (runs <= count)
{
i = s->find(*tosplit, lasti + 1);
std::cout << i << " " << lasti << std::endl;
split.at(runs) = s->substr(lasti, --i);
runs++;
lasti = i;
}
split.at(runs) = s->substr(lasti, s->size());
std::cout << "done, result is" << std::endl;
i = 0;
while (i < split.capacity())
{
std::cout << split.at(i) << std::endl;
i++;
}
return split;
}
out_of_range例外をスローします。あなたが与えることができるどんな助けでもありがたいです。これは、関数でポインターを使用する最初の部分のようなものなので、ここでちょっと推測しています。
ありがとう!
xまたはyメソッドの使用を提案しないでください。私は経験のためにそれを行っているので、私は自分で書きたいと思います。