Hi, ich bin gerade dabei ein paar Programmierübungen zu machen und es geht im Prinzip darum eine Zahl mit gerader Stellenzahl in zwei Hälften zu teilen und jeweils die Quersumme zu berechnen und zu vergleichen.
Da ich sowas normalerweise gerne arithmetisch löse, habe ich mich hier aber für einen String-Ansatz entschieden. Ich verwende stringstream um den Integer in einen String zu konvertieren und die Zeichen wieder zu einem Integer. Im Folgenden habe ich erstmal den Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
bool isLucky(int n) { // n = 1230
std::stringstream stream;
stream << n;
std::string ns = stream.str(), part1, part2; // ns := n als String
part1 = ns.substr(0, ns.length() / 2); // Erste Hälfte
part2 = ns.substr(ns.length() / 2, ns.length() / 2); // Zweite Hälfte
return (partialSum(part1) == partialSum(part2));
}
int partialSum(std::string part) {
std::cout << part << std::endl; // Ausgabe: 12 30 korrekt
std::stringstream stream;
int partSum = 0;
for(auto it = part.begin(); it != part.end(); it++) {
std::cout << *it << std::endl; // Ausgabe: 1 2 3 0 korrekt
stream << *it;
int value = 0;
stream >> value;
std::cout << value << std::endl; // Ausgabe: 1 0 3 0 ??
partSum += value;
}
return partSum;
}
|
Der Code ist entsprechend kommentiert, mit der Testeingabe und den Debug-Ausgaben versehen. Ich weiß dass ich die einzelnen Zeichen auch mit '0'-Subtraktion oder atoi konvertieren könnte, aber ich wollte einfach mal mit stringstreams arbeiten und die STL Klassen verwenden. Bei anderen Testeingaben verhält es sich auch so, dass bei jeder Hälfte nur die erste Ziffer korrekt "konvertiert" wird. Könnte mir jemand dieses Verhalten erklären?
Grüße