Avatar billede skwat Praktikant
21. januar 2007 - 23:51 Der er 7 kommentarer og
1 løsning

StringReplace og performance

Hejsa Eksperter,

Jeg er ved at lave noget net noget, hvor en række tegn bliver brugt som protekol sekvenser. derfor er tegn som , ; : og | ikke gyldige.
En måde at komme ud over det, er at escape disse tegn, og det har jeg valgt at gøre ved at skrive deres ascii værdi i hex med en \ foran.
Lige nu gør jeg det ved at fyre en række StringReplace'er af.
Men jeg er meget i tvivl om det er den mest effiktive måde at gøre det på.
Nogen der har en kommentar til hvordan man kan gøre dette?
Bruger borland, under pingvinOS. Det data som skal escapes er i en AnsiString, og resultatet skal også være i en AnsiString.
Avatar billede bertelbrander Novice
22. januar 2007 - 01:00 #1
Der er ikke noget der slår gamle char xx[] og manuel flytning af bytes, men det er en noget besværlig metode.
Så inden du omskriver det hele bør du nok undersøge om StringReplace udgør et problem.
Avatar billede skwat Praktikant
22. januar 2007 - 09:49 #2
StringReplace virker egentligt som den skal.

Jeg har selv lavet lidt frem og tilbage med char[], og jeg syntes ikke rigtigt jeg kan finde den performance som jeg forventer.

Kan evt. lave en lille metode der tager alle \ og erstatter med \XX, og alle : med \YY ?
Avatar billede bertelbrander Novice
22. januar 2007 - 19:55 #3
#include <iostream>

void Convert(char* aDest, const char* aSrc)
{
  while(1)
  {
      switch(*aSrc)
      {
      case '\0':
        *aDest = 0;
        return;
      case '\\':
        *aDest++ = '\\';
        *aDest++ = '3';
        *aDest++ = '2';
        break;
      case ':':
        *aDest++ = '\\';
        *aDest++ = '2';
        *aDest++ = '1';
        break;
      default:
        *aDest++ = *aSrc;
      }
      aSrc++;
  }
}

int main()
{
  char TestString[] = "Foo\\Bar:Baz";
  char OutPut[32];
  Convert(OutPut, TestString);
  std::cout << "Before: " << TestString << std::endl << "After: " << OutPut << std::endl;
}
Avatar billede skwat Praktikant
24. januar 2007 - 20:45 #4
hvorfor er det egentligt du ikke lægger et svar? ;)
Avatar billede bertelbrander Novice
24. januar 2007 - 22:31 #5
Problemet med at lægge et svar er at du så kunne føle dig fristet til at acceptere det og dermed give mig point, det vil jeg gerne undgå.
Avatar billede skwat Praktikant
25. januar 2007 - 22:10 #6
skal det forståes som at du ikke vil have point? Og at jeg selv skal nuppe dem?
Avatar billede bertelbrander Novice
26. januar 2007 - 00:19 #7
Ja.
Avatar billede skwat Praktikant
27. januar 2007 - 22:16 #8
very....
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester