Skip to content

Instantly share code, notes, and snippets.

@virtuosonic
Last active April 11, 2023 05:11
Show Gist options
  • Save virtuosonic/aecfa424bb4720418175e1dcc5fc1e35 to your computer and use it in GitHub Desktop.
Save virtuosonic/aecfa424bb4720418175e1dcc5fc1e35 to your computer and use it in GitHub Desktop.
/******************************************************************************
program to test several functions to tokenize strings
*******************************************************************************/
#include <iostream>
#include <chrono>
#include <vector>
#include <functional>
#include <sstream>
#include <cstring>
using namespace std;
using namespace std::chrono;
using Tokens = vector<string> ;
Tokens strtokSplit(string str, const char c)
{
Tokens result;
char * p;
// Here, the delimiter is white space.
p = strtok(const_cast<char*>(str.c_str()), " ");
while (p != NULL) {
result.push_back(p);
p = strtok(NULL, " ");
}
return result;
}
Tokens streamSplit(string str, const char c)
{
Tokens result;
stringstream ss(str);
string word;
while (ss >> word) { // Extract word from the stream.
result.push_back(word);
}
return result;
}
std::vector<std::string> split(const char *str, const char c )
{
std::vector<std::string> result;
do
{
const char *begin = str;
//increase pointer until c is found
while(*str != c && *str)
str++;
//if both pointer are equal ignore, else add
if ( begin != str )
result.push_back(std::string(begin, str));
//jump the c found
} while (0 != *str++);
return result;
}
Tokens vs_split(string s,char d)
{
return split(s.c_str(),d);
}
void callFunc(function<Tokens(string,char)> f,string s)
{
auto start = chrono::steady_clock::now();
f(s,' ');
cout << duration_cast<nanoseconds>(chrono::steady_clock::now() - start).count()
<< " ns" << endl;
}
int main()
{
string s{"Hello World sdfpoksdpomkfsdpok sdfkopsdfospidjfm ewfjoppwefjmiewof sjofpbjmdkpsv sjovpdskmkvodspvds wrjriopewjopwejkvpwe vsjddopjvsopvdksjpod wjeopfvwejfopewjvewp vwejopewjopwev sfsjdmfnoibmiopdfboijrb wgejpwejpovjpowvpojew Hello World sdfpoksdpomkfsdpok sdfkopsdfospidjfm ewfjoppwefjmiewof sjofpbjmdkpsv sjovpdskmkvodspvds wrjriopewjopwejkvpwe vsjddopjvsopvdksjpod wjeopfvwejfopewjvewp vwejopewjopwev sfsjdmfnoibmiopdfboijrb wgejpwejpovjpowvpojew Hello World sdfpoksdpomkfsdpok sdfkopsdfospidjfm ewfjoppwefjmiewof sjofpbjmdkpsv sjovpdskmkvodspvds wrjriopewjopwejkvpwe vsjddopjvsopvdksjpod wjeopfvwejfopewjvewp vwejopewjopwev sfsjdmfnoibmiopdfboijrb wgejpwejpovjpowvpojew Hello World sdfpoksdpomkfsdpok sdfkopsdfospidjfm ewfjoppwefjmiewof sjofpbjmdkpsv sjovpdskmkvodspvds wrjriopewjopwejkvpwe vsjddopjvsopvdksjpod wjeopfvwejfopewjvewp vwejopewjopwev sfsjdmfnoibmiopdfboijrb wgejpwejpovjpowvpojew"};
callFunc(vs_split,s);
callFunc(streamSplit,s);
callFunc(strtokSplit,s);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment