Strings verarbeiten



  • hi,

    also erstmal ein beispiel zur verständnis:

    string = "das.ist.ein.test"
    
    func(string,".",0) = 4              // wieviele wörter durch punkte getrennt werden
    func(string,".",1) = das            // erstes wort was mit den punkt getrennt wird
    func(string,".",1-3) = das.ist.ein  // gibt die ersten 3 wörter aus die getrennt sind mit punkten
    

    also meine frage ist, gibt es so eine funktion oder eine ähnliche?
    und wenn nicht, aus welchen funktionen könnte ich mir sie zusammen basteln?



  • hmm gibt es nicht ....

    func(".", "Das.ist.ein.Test!") = 4

    std::string test("Das.ist.ein.Test");
    std::size_t count = std::count_if(test.begin(), test.end(), std::bind2nd(std::equal_to<char>(), '.'));
    if (test.at(test.length() - 1) == '.')--count;
    if (test.at(0) == '.')--count;
    

    könnte aber gehen ...



  • func(string,".",1) = das

    std::string test("Das.ist.ein.Test");
    std::string result = test.substr(test.find_first_not_of('.'), test.find_first_of('.'));
    

    ...



  • std::size_t count_words(const std::string& string, char iterator = ' ')
    {
        std::size_t count = std::count_if(string.begin(), string.end(), std::bind2nd(std::equal_to<char>(), iterator));
        if (string.at(string.length() - 1) == iterator) --count;
        if (string.at(0) == iterator) --count;
        return --count;
    }
    

    Könntest jetzt noch hingehen und eine Kopie von string anlegen. Daraus dann alle direkt auf einander folgenden '.' rauslöschen, so das nur einer davon übrig bleibt ...

    std::string& split_word(const std::string& string, std::size_t start = 0, std::size_t end = 1, char iterator = ' ')
    {
        std::size_t tmp_beg = 0;
        for (std::size_t pos = 0; pos < beg; ++pos)
            tmp_beg = string.find_first_of(iterator, tmp + 1);
        std::size_t tmp_end = 0;
        for (std::size_t pos = 0; pos < end; ++pos)
            tmp_end = string.find_first_of(iterator, tmp + 1);
    
        return string.substr(tmp_beg, tmp_end - tmp_beg);
    }
    

    Das kann dann beides 🙂 (die letzten beiden Fragen)

    std::string test("Das.ist.ein.Test!");
    std::cout << split_word(test, 0, 1, '.') << std::endl;
    std::cout << split_word(test, 0, 3, '.') << std::endl;
    

    ...


Anmelden zum Antworten