Ich habe viel weniger Erfahrung mit C als mit höheren Sprachen. Bei Cisco verwenden wir C, und manchmal stoße ich auf etwas, das in Java oder Python leicht, in C aber sehr schwer zu bewerkstelligen wäre.
Ich habe ein dynamisch zugewiesenes Array von ganzen Zahlen ohne Vorzeichen, die ich in eine kommagetrennte Zeichenfolge für die Protokollierung konvertieren muss. Während die Integer wahrscheinlich nicht sehr groß sein, könnten sie konzeptionell überall von 0 bis 4.294.967.295 In Python, das ist eine kurze Zeile sein.
my_str = ','.join(my_list)
Wie elegant kann man das in C machen? Ich habe einen Weg gefunden, aber er ist ekelhaft. Wenn jemand einen schönen Weg kennt, es zu tun, bitte erleuchten Sie mich.
2 Stimmen
Können Sie die Art und Weise posten, wie Sie es in C gemacht haben?
2 Stimmen
Moment, join() ist eine Funktion der Klasse string!?
0 Stimmen
@BibedalShark: es ist C und nicht C++; keine Klasse
0 Stimmen
Ich spreche von seinem Python-Beispiel.
0 Stimmen
Ja, das ist sie.
', '.join([1, 2, 3])
wird emittieren1, 2, 3
.3 Stimmen
Bipedal: Auf diese Weise müssen wir join nur einmal implementieren (okay, einmal pro Stringklasse, also zweimal), anstatt hunderte Male für jeden möglichen Typ von iterable-Objekten. Lesen
','.join(sequence)
als "kommagetrennte Folge" und''.join(sequence)
als "leer-getrennte Folge"1 Stimmen
@BipedalShark - docs.python.org/library/stdtypes.html#str.join
0 Stimmen
Ich vermute, es war zu viel, um eine "iterables" Elternklasse haben?
1 Stimmen
Zweibeiner: Ja, das ist es tatsächlich. Python verwendet Duck-Typing und jedes Objekt kann ein Iterator sein, indem es nur next und
__iter__
Methoden. Python erfordert keine Vererbung, um eine Schnittstelle zu spezifizieren.1 Stimmen
Warum nicht einfach eine Funktion
join(sequence, delim)
? Was ist so besonders an Methoden, dass man sie anwenden muss, auch wenn die Lösung so unelegant ist?0 Stimmen
"".join()
ist eine Warze von Python. Betrachten Sie jedoch etwas Ähnliches:a = ","; b = a.join(seq)
-- es sind nur die Literale, die Sie verwirren.