Zweite Zahl aus einem eingegeben String wird umgekehrt ausgegeben



  • Hi, ich habe folgendes Problem: Ich gebe eine Rechnung als eine Folge von einer Zeichenkette an(String). Wenn ich die Rechnung eingebe, erkennt das Programm die erste Zahl, welche Operation( +, *, -, /) durchgeführt werden soll und die zweite Zahl der Operation. Nur ist das Problem, dass die zweite Zahl verkehrt ausgegeben wird, z.B: statt 16 wird 61 ausgegeben oder statt 25 wird 52 ausgegeben.

    Hier mal mein Programmcode:

    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include <stdio.h>

    int main(int argc, char * argv[])
    {

     char satz[10];
     char operand1[10];
     char operand2[10];
     char zw[10];
     double b;
     double d;
    
    
    
     fgets(satz, 10, stdin);
    
     for(int i=0;i<strlen(satz);i++)
     {
            if(satz[i]=='+')
            {
                    printf("Erste Zahl: ");
                    for(int k=0;k<i;k++)
                    {
                      printf("%c", satz[k]);
                      operand1[k] = satz[k];
                    }
    
    
                    printf("\nZweite Zahl: ");
                    for(int j=i+1; j<strlen(satz); j++)
                    {
                          printf("%c", satz[j]);
    
                          for(int h=0;h<(strlen(satz)-j);h++)
                          {
                             operand2[h]=satz[j];
                          }
    
                    }
    
    
    
            }
      }
    
    
    
     printf("\n%s", operand1);
     printf("\n%s", operand2);
    

    return 0;
    }

    Die Ausgabe als Beispiel sieht wie folgt aus:
    53+98
    Erste Zahl: 53
    Zweite Zahl: 98

    53 //Ausgabe vom Operand1

    89 //Ausgabe vom Operand2



  • Deine innere Schleife mit for(int h=0;h<(strlen(satz)-j);h++) ist komplett überflüssig - mach es doch so wie bei der ersten Zahl (nur dass du jetzt das i+1 subtrahieren musst): operand2[j-i-1] = satz[j];.

    Das behebt dieses Problem. Aber:

    1. das ist C (nicht C++, also falsches Forum)
    2. Variablen wie operand1 sind NICHT null-initialisiert. Dir fehlt beim Kopieren überall das abschließende \0.
    3. Alle strlen sind überflüssig (man erkennt das Ende am \0). Und wenn du es doch brauchst: 1x berechnen reicht.
    4. Du hast ungenutzte Variablen. Schalte Warnungen im Compiler an!
    5. Wichtig: warum die Zahlen nicht gleich mit scanf einlesen?! Also so:
    int main()
    {
        int zahl1, zahl2;
        char op;
        if (3 == scanf("%d %c %d", &zahl1, &op, &zahl2)) {
            printf("OK, Zahl 1 = %d, Zahl 2 = %d, operator = %c\n", zahl1, zahl2, op);
        } else {
            puts("Falsche Eingabe");
        }
    }
    

  • Gesperrt

    Here is an example code to extract the second number from an input string and reverse it in C++:
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <algorithm>

    int main() {
    std::string input;
    std::cout << "Enter a string with numbers: ";
    std::getline(std::cin, input);

    std::stringstream ss(input);
    std::string token;
    int count = 0;
    int number = 0;
    
    while (ss >> token) {
        if (std::isdigit(token[0])) {
            count++;
            if (count == 2) {
                number = std::stoi(token);
                break;
            }
        }
    }
    
    if (count < 2) {
        std::cout << "No second number found in the input string." << std::endl;
        return 0;
    }
    
    std::string result;
    while (number > 0) {
        result += (number % 10 + '0');
        number /= 10;
    }
    
    std::cout << "The reversed second number is: " << result << std::endl;
    
    return 0;
    

    }
    In this code, we use std::getline to get the input string from the user, then we use a stringstream to split the input string into tokens based on whitespaces. We use std::isdigit to check if the first character of each token is a digit, and if it is, we increment the count variable. Once the count reaches 2, we extract the number using std::stoi and store it in the number variable. Finally, we use a while loop to reverse the number and store the result in a string.



  • @Kanchan You might not have noticed but the OP is writing in C. Also what you posted is far from an elegant solution in C++.



  • @Swordfish das ist chatgpt copy&paste.


Anmelden zum Antworten