Probleme bei der Zerteilung von einem String



  • Hallo!

    Ich möchte gerne einen Rechner für die Addition zwei großer Zahlen programmieren,
    wobei die Eingabe der beiden Zahlen A und B in einer Zeile erfolgen soll.
    Wenn zwei Zahlen und ein "+" eingegeben werden, funktioniert das Ganze.

    char eingabe[30];
    	char summe[50];
    	char A[15];
    	char B[15];
    	printf("A+B ");
    	fgets(eingabe, 30, stdin);
    	strcpy(A,strtok(eingabe,"+"));
    	strcpy(B,strtok(NULL,"\n"));
    	printf("%s+%s",A,B);
    

    ABER:
    Wenn nach dem "+" keine weitere Eingabe erfolgt, stürzt das Programm ab.
    Wie kann ich für einen solchen Fall die Zahl "0" in den String "B" schreiben?

    mfg
    newbie2



  • mit *strlen(char ); kannst du die länge einer zeichenkette abfragen



  • Wie bereits erwähnt, soll der gesamte Term in einer Zeile eingegeben werden.
    Da die beiden Summanden unterschiedlich lang sein dürfen,
    bringt mich size_t strlen(const char)* nicht sonderlich weiter.
    Trotzdem Danke!



  • doch: du könntest zb die länge des 2. strings abfragen.
    wenn das nicht geht, kannst du einfach den string zeichen für zeichen checken und gleichzeitig splitten (habs ned getestet, hoffentlich kein error)

    int i=0,ergebnis;
    bool plus_found=false;
    char *a=eingabe,*b=NULL;
    
    while(eingabe[i] && !plus_found) {
        if(eingabe[i]=='+') {
            plus_found=true;
            eingabe[i]='\0';
            b=&eingabe[i+1];
        }
        i++;
    }
    
    if(b && *a && *b) {
        ergebnis=atoi(a)+atoi(b);
    }
    


  • strtok gibt in diesem Fall Null zurück, also kannst du es einfach so machen:

    char eingabe[30];
    char summe[50];
    char A[15]="0";
    char B[15]="0";
    char * test;
    printf("A+B ");
    fgets(eingabe, 30, stdin);
    test = strtok(eingabe,"+"); 
    if(test)strcpy(A,test);
    test = strtok(NULL,"\n");
    if(test)strcpy(B,test);
    printf("%s+%s",A,B);
    

    Gruß
    Entyl Sa



  • Hurra, es funktioniert! 😃

    VIELEN DANK an Frauke2k und Entyl Sa! 🙂

    mfg
    newbie2


Anmelden zum Antworten