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: 9853 //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 dasi+1
subtrahieren musst):operand2[j-i-1] = satz[j];
.Das behebt dieses Problem. Aber:
- das ist C (nicht C++, also falsches Forum)
- Variablen wie
operand1
sind NICHT null-initialisiert. Dir fehlt beim Kopieren überall das abschließende \0. - Alle
strlen
sind überflüssig (man erkennt das Ende am \0). Und wenn du es doch brauchst: 1x berechnen reicht. - Du hast ungenutzte Variablen. Schalte Warnungen im Compiler an!
- 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"); } }
-
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.