Der folgenden Code zunehmende Größe Schnipsel Ausgang unterschiedliche Ergebnisse für den gleichen Eingang (7.747.774):Leere Zeichenkette durch eine in C++
A:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string N;
cin >> N;
int K = count(N.begin(), N.end(), '4') + count(N.begin(), N.end(), '7');
string C = to_string(K);
bool lucky = (K>0) && (count(C.begin(), C.end(), '4') + count(C.begin(), C.end(), '7') == C.size());
cout << (lucky?"YES":"NO") << endl;
return 0;
}
B:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string N;
cin >> N;
int K = count(N.begin(), N.end(), '4') + count(N.begin(), N.end(), '7');
string C = "" + K;
bool lucky = (K>0) && (count(C.begin(), C.end(), '4') + count(C.begin(), C.end(), '7') == C.size());
cout << (lucky?"YES":"NO") << endl;
return 0;
}
A Druck JA, während B NO druckt, da die Größe von "C" in B um eins erhöht wurde. Warum das?
'" "+ K' ist nicht richtig, das ist nicht Java – yassin
Nicht das Problem hier, aber Sie können einige Stress und zusätzliche Arbeit vermeiden, indem Sie SHOUTCASE Namen für Makros reservieren, und indem Sie in der Regel keine einzelnen Buchstaben verwenden. Die zwei Hauptausnahmen sind Schleifenzählervariablen, herkömmlich "i", "j" und "k", und ein Vorlagentypargument, herkömmlicherweise "T". Für letztere ziehe ich es vor, die Konvention zu brechen und 'Type' zu schreiben. –
@yassin: Es ist auch in Java ein schlechter Stil. Man sollte 'String.valueOf (K)' verwenden. –