Cięcie stringa z dwoma delimiterami i wkładanie do substringów

0

Za pomocą std::getline odczytuję z pliku linijkę i otrzymuję taki string:

std::string = "Basia#Kasia Zosia";

Jak go mogę pociąć aby uzyskać taki końcowy efekt?

std::string substr1 = "Basia";
std::string substr2 = "Kasia";
std::string substr3 = "Zosia";

tj. delimiterem jest zarówno spacja jak i #.

1

Linki powyżej, w zasadzie powinne wystarczyć, ale linki, jak to linki, lepiej, żeby wszystko co potrzebne do rozwiązania było na forum(za fluentcpp.com + trim z odmętów netu:)):

std::vector<string> split_twice(const std::string& str, char delim, char delim2) {	
	std::vector<string> cont;
    std::stringstream ss(str);
    std::string token;
    while (std::getline(ss, token, delim)) {
        cont.push_back(token);
    }
    std::string tmp("");
    for (auto & e : cont)
		tmp = tmp + " " + e;
	cont.erase(cont.begin(), cont.end());
	tmp = trim(tmp);
	std::stringstream s2(tmp);
	while (std::getline(s2, token, delim2)) {
        cont.push_back(token);
    }
    return cont;
}

std::string trim(std::string s1){
	if (s1[0] == ' ') s1.replace(0, 1, "");
	std::reverse(s1.begin(), s1.end());
	if (s1[0] == ' ') s1.replace(0, 1, "");
	std::reverse(s1.begin(), s1.end());
	return s1;
}

Jeśli chodzi o split, to on rozdziela stringi na listę zgodnie z delimiterem.

0

Problem rozwiązany za pomocą:

std::string text= "Basia#Kasia Zosia";
std::replace(text.begin(), text.end(), '#', ' ');
std::stringstream ss(text);
ss >> substr1 >> substr2 >> substr3;

Ale mam jeszcze jedno pytanie:
Co powinienem wpisać zamiast text.end() jeśli chcę, aby std::replace podmieniał tylko pierwsze N liter w stringu, a resztę olewał?

EDIT: Rozwiązane za pomocą:

const int N = 54;
std::replace(text.begin(), text.begin()+N, '#', ' ');

1 użytkowników online, w tym zalogowanych: 0, gości: 1