[C/C++] string durchsuchen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von myth2806, 22. Oktober 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 22. Oktober 2006
    string durchsuchen

    hi leute,

    ich habe ein problem. und zwar geht es um folgendes: ich möchte gerne einen string nach zeichen durchsuchen und den text zwischen diesen zeichen zu einem string zusammenführen.

    eigendlich wollte ich es so machen:

    Code:
    int c = 0;
    char buffer[16276] = "sdfgd'abcdefghi'söldhfsfgjklö'jklmnop'sdlkhf'qrstuvw'dfhgdkljhf'xyz';";
    char hash_buf[16276];
    tmp = strcspn(buffer, "'")+2; // schwer zu erkennen aber argv2 von strcspn ist ein ->'<-
     
    while (1==1)
    {
     if (buffer[tmp] == "'") // hier erneut der fall
     {
     if (buffer[tmp] + 2 != ";") 
     {
     tmp += 4;
     }
     else break;
     }
    
     buffer[tmp] == hash_buf[c];
     c++;
     tmp++;
    }
    
    printf ("%s\n", hash_buf);
    
    joa leider funktioniert dass nicht so ganz...
    vielleicht hat ja einer von euch eine idee dazu.. also thx schon mal im vorraus

    greez myth
     

  2. Anzeige
  3. #2 22. Oktober 2006
    AW: string durchsuchen

    Also... Ich hab dein code nicht wirklich verstaden!!! aber ich hab mich mal hingesetzt und was kleines geschrieben! ist auch nicht die feine englische art aber funktioniert!


    Code:
    #include <windows.h>
    #include <iostream>
    #include <conio.h>
    
    int main ()
    {
     char buffer[] = "sdfgd'abcdefghi'söldhfsfgjklö'jklmnop'sdlkhf'qrstuvw'dfhgdkljhf'xyz';";
     int iBufferPos = 0;
     char TempBuffer[1024] = "";
     
     for(int iCursor = 0; iCursor < sizeof(buffer); iCursor++)
     {
     // Zeile zu ende = Stop!
     if(buffer[iCursor] == 0)
     {
     iCursor++;
     printf("endline...\n");
     break;
     }
     
     // Statusmeldung!
     printf("%d_search....\n", iCursor);
    
     
     // Nach zeichen Suchen!
     if(buffer[iCursor] == 39) // 39 entspricht "'"
     {
     printf("%d_found....\n", iCursor);
     strncpy(TempBuffer, buffer + iBufferPos, iCursor - iBufferPos);
    
     printf("Text: %s", TempBuffer);
     printf("\n");
    
     iBufferPos = iCursor + 1 ;
    
     ZeroMemory(TempBuffer, 1024);
     }
    
     }
     getch();
     
     return 0;
    }
    Hab hier noch ne seite zu ner ASCII-, ANSI- und HTML-Zeichencodes Tabelle: ASCII-Tabelle
     
  4. #3 22. Oktober 2006
    AW: string durchsuchen

    hmm ich hät jetzt so auf den ersten blick gesagt, dass das Hochkomma ( ' ) auch in Hochkommata muss also pratisch ''' nur dass das dummerweise nicht geht :D Dementsprechend hab ich dann einfach nen char Array mit zwei stellen gemacht und "'" redeklariert und definiert ^^ schau die ma den code an, dann wirste wissen was ich mein:
    Code:
    const char HochKomma[2] = "'";
    int tmp = strcspn(buffer, &HochKomma[0])+2; // schwer zu erkennen aber argv2 von strcspn ist ein ->'<-
     
    while (1==1)
    {
     if (buffer[tmp] == HochKomma[0]) // hier erneut der fall
     {
     if (buffer[tmp] + 2 != ';')
    
    so dürfte das eigentlich irgentwie laufen... da ich nur nicht weiß was das ganze machen soll, konnt ichs nicht wirklich testen. ich hab aus dem tmp einfach ma nen integer gemacht...
    Ich vermute jetzt mal du möchtest ne Liste machen... Wieso nimmst du da nicht die "list" Funktion der STL??

    mfg thecoolman4rr

    PS: falsch ich deine Frage/deinen Quelltext falsch verstanden hab... sorry :D
     
  5. #4 22. Oktober 2006
    AW: string durchsuchen

    Hi,

    1. strtok() :

    Code:
    char *ptr;
    char search_string;
    
    ptr = strtok(search_string,"'");
    while (ptr != NULL)
    {
     // ptr = teilstring
     ptr = strtok(NULL,"'"); // weiter splitten
    }
    2. Von Hand:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_BUF 1024
    #define SPLIT_CHAR '\''
    
    int main()
    {
     char search_string[] = "eins'zwo'drei'vier";
     unsigned int tmp;
     unsigned int len;
     unsigned int counter;
    
     tmp = 0;
     len = strlen(search_string);
     counter = 0;
    
     for (tmp = 0; tmp < len; tmp++)
     {
     if (search_string[tmp] == SPLIT_CHAR)
     {
     counter++;
     }
     }
     // Wir wissen jetzt, wie oft SPLIT_CHAR in search_string vorkommt
     if (counter == 0)
     {
     // SPLIT_CHAR kommt nicht in search_string vor
     return 0;
     }
    
     counter++;
    
     char **ergebnis;
    
    
     ergebnis = malloc(counter *
     sizeof(char*));
     for (tmp = 0; tmp < counter; tmp++)
     {
     ergebnis[tmp] = malloc(MAX_BUF);
     }
    
    
     unsigned int array_nr = 0;
     unsigned int char_nr = 0;
     for (tmp = 0; tmp < len; tmp++)
     {
     if (search_string[tmp] == SPLIT_CHAR)
     {
     ergebnis[array_nr][char_nr] = '\0';
     ++array_nr;
     char_nr = 0;
     continue;
     }
     ergebnis[array_nr][char_nr] = search_string[tmp];
     ++char_nr;
     ergebnis[array_nr][char_nr] = '\0';
     }
    
     for (tmp = 0; tmp < counter; tmp++)
     {
     printf("ergebnis[%i] = \"%s\"\n",tmp,ergebnis[tmp]);
     }
    
     // free
     for (tmp = 0; tmp < counter; tmp++)
     {
     free(ergebnis[tmp]);
     }
     free(ergebnis);
     return 0;
    }
    
    Ich hoffe, das ist das, was du willst :p
    Du kannst dann einfach auch per strncat die Sachen zusammenfuehren, wenn du 1 (!) String willst.

    Mfg,

    Kolazomai
     
  6. #5 22. Oktober 2006
    AW: string durchsuchen

    wunderbar habe ja jetzt mehrer lösungsansetzte oder lösungen mit denen es funtkioniert.

    big thx an alle für hiulfe bei diesem kleinem problem XD

    greez myth
     

  7. Videos zum Thema
Die Seite wird geladen...
Similar Threads - C++ string durchsuchen
  1. Antworten:
    5
    Aufrufe:
    1.887
  2. Antworten:
    10
    Aufrufe:
    1.161
  3. Antworten:
    3
    Aufrufe:
    696
  4. Antworten:
    11
    Aufrufe:
    1.274
  5. Antworten:
    0
    Aufrufe:
    6.632