Vector Problem
-
ich möchte die drei Elemente(3x "FIRST!SECOND!LAST!") in ein neuen vector und in ein neues Element geben, sodass der vector 3 elemente hat, aber jedes Element nur ein Wort von dem.
Hier hab ich ein anderes Beispiel versucht:
ich wollte alle drei elemente so machen, dass bei allen nach einem Rufzeichen immer ein Abstand gemacht wird.
std::vector<char*> test(3, "FIRST!SECOND!LAST!"); std::vector<std::string> newT(3); std::cout << test[0] << std::endl; for(int i = 0; i != test.size(); ++i) { if(test[i] == "!") { newT[i] = test[i] + ' '; std::cout << newT[i]; } else { std::cout << "Suchen.." << std::endl; } }cu
-
Ich würde dir empfehlen, den String in seine Einzelteile zu zerlegen - mit find() kannst du die Position der einzelnen '!' herausfinden, mit substr() schneidest du dir die Teile dazwischen aus.
-
void fill_vector(std::string const& str, std::vector<std::string>& data, char delim = '!') { std::size_t pos_beg(0); for (std::size_t pos_end(str.find(delim)); pos_end != std::string::npos; pos_end = str.find(delim, pos_beg)) { data.push_back(str.substr(pos_beg, pos_end - pos_beg)); pos_beg = ++pos_end; } }... so zum Beispiel ... nen bissel mit Templates:
template <typename dest> void fill_vector(std::string const& str, std::vector<dest>& data, const char* delim = "!") { std::size_t pos_beg(0); for (std::size_t pos_end(str.find_first_of(delim, pos_beg)); pos_end != std::string::npos; pos_end = str.find_first_of(delim, pos_beg)) { std::istringstream ss(str.substr(pos_beg, pos_end - pos_beg)); dest tmp; if (!(ss >> tmp)) throw std::runtime_error("invalid data"); data.push_back(tmp); pos_beg = ++pos_end; } }