Teilstrings



  • Hi,

    ich sitze an einer eigentlich ganz einfachen Aufgabe, doch für mich als C-Neuling ziemlich kniffligen Aufgabe 😉 .
    Es soll ein einzeilger String der mit Trennzeichen getrennt ist, in Einzelstrings zerlegt werden (ohne strtok).
    Das habe ich ja noch einigermaßen hinbekommen. So sieht mein Quelltext aus:

    /* Teilstring.c */
    
    #include <stdlib.h>
    #include <stdio.h>
    
    char *p,line[100],trenn=';';
    int i,j;
    
    int main() {
    
        printf("Beliebigen String eingeben und mit \";\" trennen!\n");
        gets(&line);
        p=line;
        for (i=0 ; i<=100 ; i++){
            if (*p != trenn)
               printf("%c",*p);
            else
               printf("\n"); 
            p++;   
        }
        printf("\n\n\n\n");
    
        system("Pause");
        return(0);
    }
    

    Nun lautet die 2. Aufgabe aber:

    "Bitte erweitern Sie das Programm aus Aufgabe 1, dass die gefundenen Teilstrings in ein Array
    of Arrays (oder alternativ eine Struktur) eingetragen werden. Anschließend sollen wieder alle
    eingetragenen Teilstrings auch auf dem Bildschirm ausgegeben werden.
    Bitte daran denken, dass Stings in der Sprache C am Ende zusätzlich das Stringendekennzeichen
    ’\0’ enthalten müssen."

    Leider bekomme ich das nicht gebacken, zumal ich noch nicht einmal mit dem Begriff "Array of Arrays" was anfangen kann.

    Für Hilfe wäre ich sehr dankbar.
    Munzi



  • Munzi schrieb:

    Es soll ein einzeilger String der mit Trennzeichen getrennt ist, in Einzelstrings zerlegt werden (ohne strtok).

    ersetz einfach die trennzeichen durch nullen. eventuell musst du eine kopie anlegen.
    🙂



  • servus,

    hab es mal gelöst bei unklarheiten einfach fragen

    /* Teilstring.c */
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    char** create_sub_string_array(char*, const char, int* );
    
    int main() {
    
        char line[1024],trenn=';',*p;
        char **subStrings;
        int i,j,sub_size;
        memset(line, '\0', 1024);
        printf("Beliebigen String eingeben und mit \";\" trennen!\n");
        scanf("%s",line);
        p=line;
        for (i=0 ; i<=100 ; i++){
            if (*p != trenn)
               printf("%c",*p);
            else
               printf("\n");
            p++;
        }
        printf("\n\n\n\n");
        subStrings=create_sub_string_array(line,trenn, &sub_size);
        fprintf(stderr, "\nSubstring array\n");
        for(i=0;i<sub_size;i++)
        {
            fprintf(stderr, "%s",subStrings[i]);
            fprintf(stderr, "\t%d\n", i);
        }
        fprintf(stderr, "\n-----------------\n");
        return(0);
    }
    
    char** create_sub_string_array(char *str, const char token, int *count_substrings)
    {
        char **ret, *first, *last ;
        int i,token_count=0,tmp;
        int count=0;
        first=str;
        last=0;
        for(i=0;i<strlen(str);i++)
        {
            if(str[i]==token)
            {
                token_count++;
            }
        }
        *count_substrings=1+token_count;
        ret=(char**)malloc((token_count+1)*sizeof(char*));
    
        for(i=0;i<strlen(str);i++)
        {
            if(str[i]==token)
            {
                last=str+i;
                tmp=last-first;
                ret[count]=(char*)malloc((tmp+1)*sizeof(char));
                memset(ret[count], '\0', tmp);
                strncpy(ret[count],first,tmp);
                fprintf(stderr, "---- %s----\n", ret[count]);
                ret[count][tmp+1]='\0';
                first=last+1;
                count++;
            }
        }
        ret[count]=(char*)malloc((strlen(first))*sizeof(char));
        memset(ret[count], '\0', tmp);
        strcpy(ret[count],first);
        return ret;
    }
    

Anmelden zum Antworten