Podział napisów na wyrazy.

0

Witam, chcę z napisać funkcję pozwalającą podzielić napis wejściowy na fragmenty i zwracającą wektor napisów. Domyślnym separatorem fragmentów powinna być spacja, ale funkcja powinna mieć opcjonalny argument definiujący znak separatora.
Main powinien wyglądać mniej więcej tak:

std::string sentence = "Ala ma kota";
std::vector<std::string> words = split(sentence); // wynik: {"Ala", "ma", "kota"}

std::string csv = "Mount Everest,8848,1953";
std::vector<std::string> data = split(csv, ','); // wynik: {"Mount Everest", "8848", "1953"}*

Nie wiem jak mam przypisać wektorowi te wyrazy. Próbowałam to zrobić na początek innym sposobem:

void split(string zdanie)
{
    vector<string> podz;
    for(int i=0; i<zdanie.length(); i++)
    {
        if(zdanie[i]==' ')
        {
            podz.push_back(zdanie.substr(i+1, ' '));

        }
        cout<<podz[i]<<endl;
    }

}
int main()
{
std::string sentence = "Ala ma kota";
//std::vector<std::string> words; //split(sentence); // wynik: {"Ala", "ma", "kota"}
//cout<<words[0]<<endl;
split(sentence);

return 0;
}

Ale również nie działa. Co jest tutaj źle i co zrobić żeby można było użyć maina takiego jak napisałam wyżej?

3

No to po kolei. Co zwraca ta funkcja?

void split(string zdanie)
1
kq napisał(a):

No to po kolei. Co zwraca ta funkcja?

void split(string zdanie)

Nic nie zwraca, bo to void.

1

Dokładnie. A co ma zwracać?

0
kq napisał(a):

Dokładnie. A co ma zwracać?

Do tego pierwszego maina ma zwracać elementy wektora, ale nie wiem jak to zrobić, co powinien zwracać return i jaki typ powinna miec ta funkcja. Próbowałam to zrobić voidem i zupełnie inny sposób no ale też nie działa.

1

Powinna zwracać taki typ, jaki jest oczekiwany. Jaki typ jest oczekiwany?

0
kq napisał(a):

Powinna zwracać taki typ, jaki jest oczekiwany. Jaki typ jest oczekiwany?

Chodzi o typ string?

0

Nie.

std::vector<std::string> words = split(sentence); // wynik: {"Ala", "ma", "kota"}

Naprawdę nie widzisz co tu jest przypisywane do zmiennej words?

0

Twoja funkcja musi zwracać vector<string>.

vector<string> split( const string& text , char separator = ' ' )
{
    vector<string> result;
    string segment;

    for( const auto& sign : text+separator )
    {
        if( sign == separator )
        {
            if( segment.size()>0 ) result.push_back(segment);
            segment = "";
        }
        else segment+=sign;
    }

    return result;
}

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