02. august 2002 - 13:51Der er
5 kommentarer og 1 løsning
flere forekomster af samme streng
Jeg skal undersøge om en bestemt streng forekommer flere gang i en streng (hvor mange) jeg kan finde den første med:
strstr(strLine.c_str(), strCompareTo);
herfra kan jeg få positionen i linien, men hvordan finder jeg ud af om der en flere? Og hvordan laver jeg en søgning på en substreng (fra position pos til slutningen af linen f.eks.)
String strLine, strCompareTo; char *ptrStr; int count;
ptrStr = strtok(strLine.C_str(), strCompareTo.c_str()); count = 0; while (ptrStr != NULL) { count++; // Restore removed delimiter string, as strtok inserts 0x0 at it's place strcpy(ptrStr+strlen(ptrStr), strCompareTo.C_str()); strPtr = strtok(NULL, strCompareTo.c_str()); };
Bemærk krøllen omkring genindsættelse af sammenligningsstrengen - desværre har strtok den skavank at den indsætter character '\x0' der hvor teksten FØR delimited strengen står. Alternativet dertil er simpelthen at lave en temporær kopi af strengen:
String strLine, strCompareTo, tmpStr; char *ptrStr; int count;
while( pDest != NULL ) { //the string "Translate(" is found //add line number, position and text to vec occCount++; nPosition = pDest - strLine.c_str() + 1; temp = CString(strLine.c_str()); temp.TrimLeft(); vec.push_back(LineData(true, nLineNumber, occCount, temp)); pDest = strtok(NULL, strCompareTo); } }
Pointen er at jeg vil vide præcis hvor mange forekomster der er af strengen Translate( og hvor på linien de står. Dette skal afleveres til vektoren som opbevarer disse informationer. Hvordan får jeg tilpasset koden til dette?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.