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; 
        }
    }
    

    😛


Anmelden zum Antworten