String Lücken füllen



  • Hey Leute!
    Ich habe morgen Test und habe eine super Übung dafür, habe aber noch nicht begonnen, weil ich wirklich fast keine ahnung hab.
    Also:
    Ich gebe einen String ein zB.: FKS-82I2-KO
    Überall wo ein Bindestrich ist, soll es weitergeführt werden. Also beim ersten Teil steht FKS und es soll nach dem Alphabet weiter gehen, also nach dem S gehts weiter. FKSTUVWXYZ, also bis Z. Zahlen sollen bist 9 weiter geführt werden.

    Meine Idee:
    Ich muss mal S erkennen. Also S - '\0' dann hab ich den Wert von S. Dann das Erg +1 in einer Schleife? Und am Ende wieder + '\0' damit ich wieder den Buchstaben hab? Mit den Zahlen das selbe. 8 - '\0' und dann Erg + 1 dann hab ich die 9?

    Wie ich auf die binäre 0 komme? Unser Lehrer hat uns den Tipp gegebn "binäre Null" hat er gesagt 😛

    Bitte ausführlich erklären ich bin ein Anfänger (:

    Gruß
    c.nub



  • c.nub schrieb:

    Meine Idee:
    Ich muss mal S erkennen. Also S - '\0' dann hab ich den Wert von S. Dann das Erg +1 in einer Schleife? Und am Ende wieder + '\0' damit ich wieder den Buchstaben hab? Mit den Zahlen das selbe. 8 - '\0' und dann Erg + 1 dann hab ich die 9?

    naja, erstmal musste das '-' erkennen, dann das zeichen davor nehmen, hochzählen, ausgeben, hochzählen usw, bis '9', 'z' oder 'Z' ausgegeben wurde. danach gehts weiter im source-string.

    c.nub schrieb:

    Wie ich auf die binäre 0 komme? Unser Lehrer hat uns den Tipp gegebn "binäre Null" hat er gesagt

    da hat er auch recht, einfach eine normale 0 (alle bits sind 0), also weder '\0', noch NULL, noch sonst irgendwas seltsames.
    🙂



  • Also nicht '\0' sondern nur 0?
    Und wie zähle ich hoch? So wie ich gesagt hab? Nur mit 0 oder wie??

    btw, warum meldest du dich net in dem Forum an?^^ Oder kann man nur dein Profil net besuchen?

    Danke schonmal.



  • c.nub schrieb:

    Und wie zähle ich hoch? So wie ich gesagt hab? Nur mit 0 oder wie??

    angenommen du findeset ein 'p' vor dem '-', dann rechnest du einfach 'p'+1 und erhältst ein 'q'. das ist zwar nicht standdardkonform, aber sollte bei dir (wie fast überall) gehen. ebenso mit ziffern, also '7'+1 = '8'. ach ja, das hochzählen von ziffern funzt auch laut c-standard.

    c.nub schrieb:

    btw, warum meldest du dich net in dem Forum an?

    warum sollte ich?
    🙂



  • Okay danke, habe in der Zwischenzeit mal das geschrieben:

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    void main (void)
    {
    	char eingabe[100], ausgabe[100];
    	int erg, i;
    	erg = 0;
    	i = 0;
    	gets(eingabe);
    	while (eingabe != '\0')
    	{
    		if (eingabe[i] == '-')
    		{
    			i--;
    			erg = eingabe[i] - '\0';
    			erg = erg + 1;
    			i++;
    			eingabe[i] = erg + '\0';
    		}
    		i++;
    	}
    	printf("%s", eingabe);
    	getch();
    
    }
    

    Bei mir kommt aber ne Fehlermeldung:
    Unbehandelte Ausnahme bei 0x00af131f in bis zum ende erweitern.exe:
    .....
    Ich kann auf Unterbrechen und Weiter klicken

    Aber es wird ja ein BreakPoint gesetzt und unten stehen dann die Werte!!
    Also wenn ich abc-123 eingebe dann steht dort unten abcd123 für die Variable Eingabe.
    Für i steht 516.

    Warum du solltest? kA dann bist du cool 😛
    Ne du investierst hier voll viel Zeit rein denk ich mal, du könntest Admin oderso werden hehe^^



  • So habe den Teil im if geändert, es kommt aber das gleich 😣
    Weiss jmd ne Lösung dazu??

    if (eingabe[i] == '-')
    		{
    			i--;
    			c = eingabe[i] - '\0'; // c ist ein einzelner char
    			i++;
    			eingabe[i] = c + 1; // wenn ich noch eingabe[i] = eingabe[i] + '\0' mache kommt die selbe Fehlermeldung aber i hat einen etwas höheren Wert... um ein paar Hundert.
    
    		}
    

    Ich komm echt net weiter.



  • Und jz hab ich wieder etwas neues, iwie klappt es garnicht, ich seh den Fehler nicht Leute pls ich brauch dringend Hilfe, morgen ist Test 😣

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    void main (void)
    {
    	char eingabe[100], ausgabe[100],c;
    	int erg, i;
    
    	i = 0;
    	gets(eingabe);
    	while (eingabe != '\0')
    	{
    		if (eingabe[i] == '-')
    		{
    			i--;
    			erg = i + 1;
    			ausgabe[erg] = eingabe[i] + 1;
    			i++;
    		}
    		i++;
    
    	}
    	printf("%s", ausgabe);
    	getch();
    
    }
    

    *edit* Es wird nix ausgegebn, die Konsole bleibt leer und nichts passiert.

    Gruß
    c.nub



  • Ich will ja, wenn es ein Buchstabe ist, dass es bis Z geht, und bei Zahlen bis 9... Es geht aber immer weiter. Wie kann ich machen, dass er bei Z und bei 9 aufhört?



  • while (eingabe != '\0') tut nicht was du willst.
    eingabe ist ein pointer und der ist immer ungleich 0 in deinem Fall.
    Was du eigentlich willst ist
    while (eingabe[i] != '\0'), denn eingabe[i] ist ein char.

    Wenn eingabe[i] != '-' ist, dann zählst du nur i hoch. Du musst aber noch eingabe[i] nach ausgabe[i+erg] kopieren.

    Innerhalb deiner while-schleife musst du sowas wie das hier schreiben:

    while (ausgabe[erg]<='9' && ausgabe[erg]<='Z' && ausgabe[erg]<='z'){ //solange kein Ende da ist
        ausgabe[erg+1] = ausgabe[erg]+1; //nächstes Zeichen ist das Zeichen vorher +1
        erg++;
    }
    

    Du solltest dir das Debuggen angewöhnen, zum Beispiel kannst du mal testweise in die while-Schleife ein

    printf("Eingabe: %s, Ausgabe: %s, aktuelles Zeichen: %c\n", eingabe, ausgabe, eingabe[i]);
    

    setzen. Dann siehst du wie die Ausgabe Schritt für Schritt zusammengebaut wird und eventuell findest du dann die Stelle die nicht funktioniert.

    @;fricky: Weil ich sonst ganz viel Blödsinn in deinem Namen hier reinschreibe 😉



  • c.nub schrieb:

    Warum du solltest? kA dann bist du cool

    bin ich auch, hihi.

    c.nub schrieb:

    Ne du investierst hier voll viel Zeit rein denk ich mal, du könntest Admin oderso werden hehe^^

    das mach ich nebenbei, wenn ich sowieso vor der pc-kiste sitze.
    admin? *ggg* du meinst wohl ehrenamtlicher handlanger zum löschen von spam-posts. nein, danke.

    nwp2 schrieb:

    @;fricky: Weil ich sonst ganz viel Blödsinn in deinem Namen hier reinschreibe

    mach doch, dann suche ich mir 'nen anderen namen aus.

    @c-nub, probier dies, aber nicht einfach abschreiben, falls es tun sollte, was du willst:

    void count_me_up (char *in, char *out)
    {
        char *p = in;
        for (;*in;in++)
        {
            if (*in == '-')
            {
                char c = *(out-1);
                if (p != in)  // ignore leading '-'
                    if (isalnum(c))  // no special chars
                        while (c != '9' && c != 'z' && c != 'Z')
                            *out++ = ++c;
            }
            else
                *out++ = *in;
        }
        *out = 0;
    }
    
    // test
    int main(void)
    {
        char *in = "-r-2-z-9-G-4-";
        char out[1024];
        count_me_up (in, out);
        puts (in);
        puts (out);
    }
    

    🙂



  • Ich kanns einfach net -.-

    [/cpp]#include <stdio.h>
    #include <conio.h>
    #include <string.h>

    void main (void)
    {
    char eingabe[100], ausgabe[100],c;
    int erg, i,z;
    z=0;
    i = 0;
    erg = 0;
    gets(eingabe);
    while (eingabe[z] != '\0')
    {
    printf("1%s\n", eingabe);
    while (eingabe[z] <= '9' || eingabe[z] <= 'z' || eingabe[z] <= 'Z')
    {
    printf("2%s\n", eingabe);
    if (eingabe[z] == '-')
    {
    printf("3%s\n", eingabe);

    eingabe[z++] = eingabe[z] + 1;

    printf("4%s\n", eingabe);

    }
    z++;
    }
    z++;

    }
    printf("%s", eingabe);
    getch();

    }[cpp]

    Cya.


Anmelden zum Antworten