Pierwsze słowo

0

Mam następujący kod którym celem jest wyciągniecie pierwszego słowa. Niestety nie działa do końca poprawnie.


#include <iostream>
#include <string>
using std::string;

int main() {
    string word;
    string test("  Ala ma kota"); // nie dziala (wykrywa ' ')
  //string test(" Ala ma kota");  //  nie dziala ( wykrywa ' Ala' )
  //string test("Ala ma kota");   // dziala

    auto it = test.begin();
    while(!(*it == ' ' && !word.empty()))
    {
        word.push_back(*it);
        ++it;

    }
    std::cout << "Pierwsze slowo: '" << word << "'" << std::endl;
}

jak będzie poprawnie + czy da się to zrobić lepiej - ważna jest szybkość i relatywna czytelność

2

http://www.cplusplus.com/reference/regex/regex_search/ ?
Możesz też wrzucic to do stringstream i wyciągnąć pierwszy element.
A "szybkie" będzie pewnie strtok http://www.cplusplus.com/reference/cstring/strtok/

0

@Shalom Dzięki, a teraz to samo z iteratorami? :]
potrzebuje iteratorów ponieważ będę chciał wyciągnąc pierwsze słowo od jakiejś pozycji, np. od środka.
Poza tym spośród zalinkowanych funkcji moje rozwiązanie wydaje mi się być najszybsze, Ponieważ zatrzymuje się gdy znajdzie, a reszta leci po całym

3
#include <iostream>
#include <string>
using std::string;

int main() {
    string word;
    string test("  Ala ma kota"); // nie dziala (wykrywa ' ')
  //string test(" Ala ma kota");  //  nie dziala ( wykrywa ' Ala' )
  //string test("Ala ma kota");   // dziala

    string white = " \r\n\t";
    size_t idx1 = test.find_first_not_of(white);
    if (idx1 != string::npos)
    {
        size_t idx2 = test.find_first_of(white, idx1);
        if (idx2 == string::npos)
            idx2 = test.length();
        word = string(test, idx1, idx2-idx1);
    }

    std::cout << "Pierwsze slowo: '" << word << "'" << std::endl;
}
4

cool, że lubicie bawić się w iteratory, białe znaki zamiast użyć streama

#include <iostream>
#include <sstream>

int main()
{
    std::string s = "   Ala ma kota";
    std::stringstream ss;
    ss << s;
    if(ss >> s) {
        std::cout << s;
    }

    return 0;
}

http://melpon.org/wandbox/permlink/hH0tvYBSKqohlWHA

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