trennung einer zeichenkette in teil ketten



  • char acArray[50]="AAAABBBBCCCCDDDDEEEEFFFF";
    
    char *p= acArray;
    
    char Part[5];
    
    strncpy(p[0],Part,4);
    strncpy(p[4],Part,4);
    strncpy(p[8],Part,4);
    

    ich hab eine string, welcher einezlen datenblöcke, hier die länge 4 zeichen repräsentiert.

    nun über nen zeiger, und via strncpy kann ich die einzlenen zeilen repräsentieren.

    aber strncpy (wenn es viel aurufe sind) ist rel langsam, weil byte für byte kopiert wird.
    es gibt sicher keine möglichkeit imm die 4 werte (parts) zu spielgen ohne zu kopieren, quasie ne referenz



  • nein 🙂 memcpy wäre noch etwas schneller, aber ist im grunde das selbe. auf maschinenebene kann auch nur byte für byte, oder word für word, oder doubleword für doubleword, oder quadword für quadword in einer schleife kopiert werden. es gibt optimierungen via sse, liegt dann aber in der verantwortung des optimierers im compiler. wenn du allerdings ohne kopieren darauf zugreifen willst, ist pointerarithmetik das zauberwort 🙂 aber um eine schleife kommst du auch nicht drumrum wenn dies sequentiell geschehen soll.



  • Brauchst Du eine 0-terminierte Kopie?

    greetz, Swordfish



  • ja wäre nicht schlecht wenn die kopie 0 terminiert wäre

    struct PART{
    
    Byte[5];
    
    } *x;
    
    char acArray[50]="AAAABBBBCCCCDDDDEEEEFFFF";
    
    x= (*PART)acArray[0];
    

    das wäre ne überlegung, aber kann sein das das hier nich funzt wie ich es mir vorstelle:)



  • stellt sich die frage, wie du die teile des arrays weiter verarbeiten willst.
    nur für temporäre vergleiche brauchst du z.b. nicht extra eine kopie zu erstellen.



  • naja noraml sieth da so aus

    1111222233334444

    zgibt mir zahl 3

    int i= "PART3 HOLEN UND IN INTEGER HOLEN"

    i ist dann 3333

    und das bei 300000 strings mit ca. 16 parts

    und in VB:(



  • BorisDieKlinge schrieb:

    und in VB:(

    strncpy in VB!?

    greetz, Swordfish



  • BorisDieKlinge schrieb:

    naja noraml sieth da so aus

    1111222233334444

    zgibt mir zahl 3

    int i= "PART3 HOLEN UND IN INTEGER HOLEN"

    i ist dann 3333

    und das bei 300000 strings mit ca. 16 parts

    und in VB:(

    das format steht also fest. dann kannst du die doch jederzeit durch berechnung kopieren, deine parts.


Anmelden zum Antworten