Is there any functions that split a string?

Such as this:

string s1 = "lol-lol2-lol3";
string s2[3];
char spliter_char = '-';

split_strings(s1, s2, spliter_char);
//s2 should now be:
//{"lol","lol2","lol3"}

You can use the substr() function to copy part of a string to another string.
I find this website really good for stuff like this here.
That is a link to the substr() reference but there is a whole lot of examples for other class functions.

Added an example program I made for an assignment that takes in a sentence and stores all the words into a vector. You can use this example and instead of looking for a space character look for the '-'.

Edited 7 Years Ago by sfuo: Misread

Attachments
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	
	string sentence, word, longest, shortest, charString, wordString;
	int characters, words;
	vector<string>wordlist;
	
	cout << "Please enter some words (ctrl-d or ctrl-z to quit): " << endl;
	
	while(getline(cin, sentence))
	{
		wordlist.clear();
		characters = sentence.length();
		int lastSpace = -1;
		
		for( int i = 0; i < sentence.length(); i++ )
		{
			if( sentence[i] == ' ' )
			{
				word = sentence.substr(lastSpace+1, (i-lastSpace-1));
				wordlist.push_back(word);
				lastSpace = i;
				characters--;
			}
			else if( i == sentence.length()-1 )
			{
				word = sentence.substr(lastSpace+1, (i-lastSpace));
				wordlist.push_back(word);
			}
		}
		
		words = wordlist.size();
		
		switch(characters)
		{
			case 1:
				charString = "character";
				break;
			default:
				charString = "characters";
				break;
		}
		
		switch(words)
		{
			case 1:
				wordString = "word";
				break;
			default:
				wordString = "words";
				break;
		}
		
		for( int i = 0; i < wordlist.size(); i++ )
		{	
			if( i == 0 )
			{
				longest = wordlist[i];
				shortest = wordlist[i];
			}
			if( wordlist[i].length() > longest.length() )
			{
				longest = wordlist[i];
			}
			if( wordlist[i].length() < shortest.length() )
			{
				shortest = wordlist[i];
			}
		}
		
		if( words > 0 )
		{
			cout << "You entered " << words << " " << wordString << " totalling "<< characters << " " << charString << "." << endl;
			cout << "The longest was \"" << longest << "\"." << endl;
			cout << "The shortest was \"" << shortest << "\"." << endl << endl;
		}
		else
		{
			cout << "You didn't enter any words." << endl << endl;
		}
		
	}
    system("PAUSE");
    return 0;
}

Not tested.

bool split_string(string& src, string& dst, char splitter)
{ 
   //check for valid size or if splitter is in src
    if(src.size() == 0 || src.find(splitter) == string::npos)
        return false;
    int i = 0;
    while(src[i] != splitter)
           dst += src[i++];

  return true;
}

What i mean is to have to dst thing a char* array.

I want it to do this:

string str = "10-20-30";
char* buffer[3];
split_string(str, buffer, '-');
//buffer should now be {"10","20","30"}

Havn't tested this, so there might be a few errors:

void split_string(const string& src, vector<string>& dst, char split)
{
    int startPos = 0, endPos = src.find(split);
    while(endPos != string::npos)
    {
        dst.push_back(src.substr(startPos, endPos-startPos));
        startPos = endPos + 1;
        endPos = src.find(split, startPos);
    }
}

I posted the answer in my attachment and you ended up just reposting what you put up in your 1st post.

I took my code and deleted a whole bunch of stuff and changed the find character from ' ' to '-'. This stores everything to a vector but you can change it to a char* array[3] if you want to but I'll leave you to think that part up.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	string sentence, word, charString, wordString;
	vector<string>wordlist;
	
	cout << "Please enter some words (ctrl-d or ctrl-z to quit): " << endl;
	
	while(getline(cin, sentence))
	{
		wordlist.clear();
		int lastSpace = -1;
		
		for( int i = 0; i < sentence.length(); i++ )
		{
			if( sentence[i] == '-' )
			{
				word = sentence.substr(lastSpace+1, (i-lastSpace-1));
				wordlist.push_back(word);
				lastSpace = i;
			}
			else if( i == sentence.length()-1 )
			{
				word = sentence.substr(lastSpace+1, (i-lastSpace));
				wordlist.push_back(word);
			}
		}
		
		if( wordlist.size() > 0 )
		{
			for(int i = 0; i < wordlist.size(); i++)
			{
				cout << wordlist[i] << endl;
			}
		}
		else
		{
			cout << "You didn't enter any words." << endl << endl;
		}
		
	}
    system("PAUSE");
    return 0;
}
This article has been dead for over six months. Start a new discussion instead.