#include <locale>
#include <fstream><stdio.h>
#include <iostream><string.h>
#include <string><ctype.h>
#includechar <locale>
#include* <string>TrimWhiteSpaces(char *str) {
#include <sstream> char *out = str;
#include <iostream> int i;
int len = strlen(str);
// This is my facetfor that(i=0; willi<len treat&& theisspace(str[i]); i++,.- asout++); space/*scan charactersforward*/
and thus ignore them.for (i=len-1; i>=0 && isspace(str[i]); str[i]=0, i--);/*scan backward*/
class TabSepFacet: public std::ctype<char> return out;
{}
char * GetTokenBetweenSquareBraces(char * public:
input, char **output, int * output_size) {
typedef std::ctype<char> char *p = base;TrimWhiteSpaces(input);
*output_size=0;
typedefif base::char_type(p[0] == '[')
char_type;
{
TabSepFacet*output = TrimWhiteSpaces(std::localep const&+ l1);
do : base(table)
{
std::ctype<char> const& defaultCType
= std::use_facet<std::ctype<char> > (l*output_size);
++;
// Copy the default value}while((*output)[*output_size] from!= the']' provided&& localeisalnum((*output)[*output_size]));
}
else
static{
char data[256]; return NULL;
}
return (*output) + *output_size;
}
char * forGetTokenBtweenOpositeSquareBraces(intchar loop* =input, 0;loopchar <**output, 256;++loopint * output_size) {
data[loop] = loop; }
char *p = TrimWhiteSpaces(input);
*output_size=0;
if defaultCType.is(data,p[0] data+256,== table']');
{
//*output Remove= theTrimWhiteSpaces(p other+ spaces1);
do for(int loop = 0;loop
< 256;++loop)
{ {
if (table[loop] & base::space (*output_size)
++;
{}while((*output)[*output_size] != '[' table[loop]&& ^=isalnum((*output)[*output_size]));
base::space; }
else
{
}
return NULL;
}
return (*output) + *output_size;
}
int GetWords(char * str,char * word1,char * word2,char * word3)
{
// Onlychar a* tabnext=NULL,*output=NULL;
is a space int outputsize;
printf ("\nSplitting string \"%s\" into tokens:\n",str);
next table['\t']= |=GetTokenBetweenSquareBraces base::space;(str,&output,&outputsize);
strncpy(word1,output,outputsize);
}word1[outputsize] = '\0';
private:strcpy(word1,TrimWhiteSpaces(word1));
if(!next) return 0;
base::mask table[256];next = GetTokenBtweenOpositeSquareBraces (next,&output,&outputsize);
} strncpy(word2,output,outputsize);
word2[outputsize] = '\0';
int main strcpy(word2,TrimWhiteSpaces(word2));
{
if(!next) return 0;
std::stringstreamnext = GetTokenBetweenSquareBraces data("Thisnext,&output,&outputsize);
is a\tTab" strncpy(word3,output,outputsize);
constword3[outputsize] std::locale= '\0';
tabSepLocale strcpy(data.getlocword3,TrimWhiteSpaces(word3));
if(!next) return 0;
return 1;
}
void TestGetWords(char * str )
{
char word1[20],word2[20],word3[20];
new TabSepFacet if (data.getlocGetWords(str,word1,word2,word3))
{
printf("|%s|%s|%s|\n",word1,word2,word3);
}
else
data.imbue{
printf(tabSepLocale"3ViLLLL\n");
}
}
int main (void)
{
std::string char str[] ="[ word;hello ] gfd [ hello2 ] ";
while(datachar >>str2[] word)="[ hello [ gfd [ hello2 ] ";
{char str3[] ="the wie321vg42g42g!@#";
char str4[] ="][123[]23][231[";
std::cout << "WordTestGetWords("str);
<< word << "TestGetWords(str2)\n";;
}TestGetWords(str3);
TestGetWords(str4);
getchar();
return 1;
}