Last active
April 11, 2023 05:11
-
-
Save virtuosonic/aecfa424bb4720418175e1dcc5fc1e35 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/****************************************************************************** | |
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