Pierwsze słowo

AB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

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

Kopiuj

#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ść

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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/

AB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
3
Kopiuj
#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;
}
gośćabc
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 500
4

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

Kopiuj
#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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.