Chez moi, j'ai repris ta fonction, et ça fonctionne avec quelques légères modifications (splitString). Néanmoins valgrind n'aime pas du tout (c'est un vérificateur mémoire). En effet, la fonction wcstok est éviter en C++ (on ne mélange pas C et C++).
Je t'ai mis une version full C++ qui est plus adaptée (et qui gère les délimiteurs multiples).
Quelques autres remarques:
- Jamais de using namespace std, voir:
[ Lien ]
- Pas besoin d'utiliser NULL, préfère 0, voir:
[ Lien ]
Code C/C++ :
#include <iostream>
#include <vector>
bool splitString(std::vector<std::wstring>& tokenArray,
const std::wstring& stringToSplit,
const wchar_t* delimiter)
{
wchar_t* localStringCopy = 0;
wchar_t* errorCallBack = 0;
localStringCopy = new wchar_t[stringToSplit.size() + 1];
wcscpy(localStringCopy, stringToSplit.c_str());
localStringCopy[stringToSplit.size()] = 0;
for (const wchar_t* currentToken = wcstok(localStringCopy, delimiter, &errorCallBack);
currentToken != 0;
currentToken = wcstok(0, delimiter, &errorCallBack)
)
{
tokenArray.push_back(currentToken);
}
delete[] localStringCopy;
return true;
}
void display(const std::vector<std::wstring>& tab)
{
typedef std::vector<std::wstring>::const_iterator iter;
const iter end = tab.end();
for (iter it = tab.begin(); it != end; ++it)
std::wcout << *it << std::endl;
}
void splitStringCpp(std::vector<std::wstring>& tokens,
const std::wstring& str,
const std::wstring& delimiters)
{
std::wstring::size_type lastPos = str.find_first_not_of(delimiters, 0);
std::wstring::size_type pos = str.find_first_of(delimiters, lastPos);
while (std::wstring::npos != pos || std::wstring::npos != lastPos)
{
tokens.push_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
}
int main()
{
const std::wstring s = L"Kikoo toto tutu tata";
// const wchar_t c = L' ';
// std::vector<std::wstring> tab;
// splitString(tab, s, &c);
// display(tab);
const std::wstring delimiters = L" ";
std::vector<std::wstring> tabCpp;
splitStringCpp(tabCpp, s, delimiters);
display(tabCpp);
return 0;
}
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio