It’s nice to be important but it’s more important to be nice
Tja alles kan (koffie kan, thee kanOp zondag 23 september 2001 17:39 schreef marcusk het volgende:
Kun je toch makkelijk zelf makenGewoon de positie van de separator in de string bepalen, en dan de karakters ervoor in een nieuwe string kopieeren, enz.
Marruh lijkt mij nogal een vorm van opnieuw het wiel uitvinden. Als PHP en VB6 een split functie hebben zal C++ het toch zeker wel moeten hebben denk
It’s nice to be important but it’s more important to be nice
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // purpose: string splitter class. Will split string using delimiter in separate CString objects.
class CStringSplitter
{
public:
CStringSplitter();
virtual ~CStringSplitter();
void Clear(void);
void DoSplit(LPCTSTR csStringToSplit, TCHAR cDelimiter);
long GetAmountOfFragments(void);
public:
CArray<CString, CString> m_arrcsSplittedFragments;
long m_lAmountOfFragments;
}; |
class code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| CStringSplitter::CStringSplitter()
{
m_lAmountOfFragments=0;
}
CStringSplitter::~CStringSplitter()
{
Clear();
}
void
CStringSplitter::Clear()
{
// Free the amount of CString splitter fragments.
m_arrcsSplittedFragments.RemoveAll();
}
void
CStringSplitter::DoSplit(LPCTSTR csStringToSplit, TCHAR cDelimiter)
{
CString csTmp=csStringToSplit;
for(long lIndx=0, m_lAmountOfFragments=1;;)
{
lIndx = csTmp.Find(cDelimiter,lIndx);
if(lIndx>=0)
{
m_lAmountOfFragments++;
lIndx++;
}
else
{
// not found, end search
break;
}
}
// Allocate string fragments
m_arrcsSplittedFragments.SetSize(m_lAmountOfFragments, 1);
if(m_lAmountOfFragments>1)
{
// we have to split the string at least once. lPrevIndx points to
// first character after last delimiter found. lIndx points to current
// position of delimiter
for(long lIndx=0, lPrevIndx=0, i=0;i<m_lAmountOfFragments;i++)
{
// get delimiter position
lIndx = csTmp.Find(cDelimiter,lPrevIndx);
if(lIndx>=0)
{
// found. Copy string between lPrevIndx and lIndx into array element.
m_arrcsSplittedFragments[i]=csTmp.Mid(lPrevIndx,(lIndx-lPrevIndx));
m_arrcsSplittedFragments[i].TrimLeft();
m_arrcsSplittedFragments[i].TrimRight();
lPrevIndx=lIndx+1;
lIndx++;
}
else
{
// not found, copy the last bit of the string into the last arrayelement.
m_arrcsSplittedFragments[i]=csTmp.Mid(lPrevIndx,(csTmp.GetLength()-lPrevIndx));
}
}
}
else
{
// just copy the entire string which had to be split into the first
// array element.
m_arrcsSplittedFragments[0]=csStringToSplit;
}
} |
(Inderdaad, MFC
Hmmm...niet direct een split, maar je hebt wel een std::string.find(...) en ook een std::string.copy(...), daar kun je vast wat mee.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Of een simpel tokenizertje in mekaar kloppen:Op zondag 23 september 2001 17:39 schreef marcusk het volgende:
Kun je toch makkelijk zelf makenGewoon de positie van de separator in de string bepalen, en dan de karakters ervoor in een nieuwe string kopieeren, enz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| class Tokenizer
{
public:
Tokenizer(char* p_String, bool p_Copy = true)
{
if(p_Copy)
{
m_Buffer = new char[strlen(p_String) + 1];
strcpy(m_Buffer, p_String);
}
else
m_Buffer = p_String;
m_Current = m_Buffer;
}
virtual ~Tokenizer();
{
delete [] m_Buffer;
}
bool GetNextToken(char p_Delimiter,
char* p_Buffer, int p_BufferSize)
{
char* m_Position = strchr(m_Current, p_Delimiter);
if(!m_Position || m_Position - m_Current > p_BufferSize)
return false;
strncpy(p_Buffer, m_Current, (m_Position - m_Current) / sizeof(char));
m_Current = m_Position;
return true;
}
private:
char* m_Buffer;
char* m_Current;
}; |
Even compleet uit het blote hoofd terwijl ik op een compile zit te wachten, oftewel GEEN GARANTIES dat het werkt of uberhaupt compileert...
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
is ook geen _echte_ c++ toch?Op maandag 24 september 2001 18:58 schreef OiSyN het volgende:
is er dan niemand die naar mij luisterd?![]()
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Verwijderd
Dat ten eerste niet neeOp maandag 24 september 2001 18:58 schreef OiSyN het volgende:
is er dan niemand die naar mij luisterd?![]()
Maar hij vroeg expliciet om een split functie, en bv in VB en VBScript heb je een splitfunctie die een array van strings oplevert (de code die ik gaf). strtok geeft een charpointer terug naar het volgende token, daarmee moet je dus nog zelf copieren en plakken.
Zei iemand wat?Op maandag 24 september 2001 18:58 schreef OiSyN het volgende:
is er dan niemand die naar mij luisterd?![]()
grrrrrOp dinsdag 25 september 2001 09:36 schreef Otis het volgende:
[..]
Dat ten eerste niet nee
ja eeh als ie overal kant en klare functies voor wilt hebben dan moet ie niet C++ gaan programmerenMaar hij vroeg expliciet om een split functie, en bv in VB en VBScript heb je een splitfunctie die een array van strings oplevert (de code die ik gaf). strtok geeft een charpointer terug naar het volgende token, daarmee moet je dus nog zelf copieren en plakken.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
oh en waar staat dan dat ie persee echte (dat doe je dus met de underscore tags: [ u] ... [/ u] (zonder spaties)Op dinsdag 25 september 2001 08:42 schreef farlane het volgende:
[..]
is ook geen _echte_ c++ toch?
En als ie dat wel bedoelt: okee, dan heb ik niets gezegd en zal ik mijn ongelijk ook gewoon willen toegeven
Dusseeeh JonkieXL (is dat niet met een u?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
en laten we het maar niet over jouw pointer tiepfout van laatst gaan hebbenOp dinsdag 25 september 2001 13:22 schreef curry684 het volgende:
[..]
Zei iemand wat?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik had gewoon copy-paste gedaan en alleen die sterretjes verwijderd okee?Op dinsdag 25 september 2001 16:34 schreef OiSyN het volgende:
en laten we het maar niet over jouw pointer tiepfout van laatst gaan hebben
* curry684 wins the Lazy Fuck of the Year award again
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
You know you're game is in trouble when... every 5 minutes you search your book shelf to look for a book named "how to program <the name of your game>", with full source code included
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ben je een echte c++ man of zo'n low-level procedurele c freubelaar die elke keer weer zijn eigen linked-list maakt en van STL nog nooit heeft gehoord en om die reden voortdurend zijn eigen nul pointers en array-boundary violations om zun oren krijgt? (hmmm......ik herken vaag enige punten in de lijst....naja
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Verwijderd
Zeg es, wanneer heb jij voor het laatst gets() of strcpy() gebruikt?Op dinsdag 25 september 2001 20:42 schreef farlane het volgende:
Ben je een echte c++ man of zo'n low-level procedurele c freubelaar die elke keer weer zijn eigen linked-list maakt en van STL nog nooit heeft gehoord en om die reden voortdurend zijn eigen nul pointers en array-boundary violations om zun oren krijgt? (hmmm......ik herken vaag enige punten in de lijst....naja)
* schaam *
(voor degenen die geinsteresseerd zijn in wat hier stond, ik heb het nog in mijn clipboard staan
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Volgens mij had ie het tegen de topicstarter hoorOp dinsdag 25 september 2001 23:03 schreef OiSyN het volgende:
[]
...
Op dinsdag 25 september 2001 23:15 schreef marcusk het volgende:
[..]
Volgens mij had ie het tegen de topicstarter hoor
Zou kunnen ja, maar ik zat te zeuren over strtok () (duidelijk een c-functie), en dat niemand naar me zat te luisteren en allemaal C++ oplossingen postten...
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Misschien dat de STL klasse string hier handig bij is.
Een string terug geven als een array van sub-strings is niet zo moeilijk. Vooral een kwestie van niet vergeten '\0' erachter te zetten, mits je met C-strings werkt.
En idd, ik had het tegen de topicstarter toen ik over Jonkie sprak ...
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.