[Aufgabe]Zeichenkette
-
Warum so kompliziert, wenn es auch einfacher geht ?
Ist das jetzt Ironie? Erstmal sieht deine Lösung nach C aus, dann ist sie wohl kaum einfacher zu verstehen als...
string reverse(str.rbegin(), str.rend());
-
Hier wird eigentlich nur C++ behandelt.
Dein Code ist reines C.
In C++ hat man da nun mal so schöne Sachen aus der STL.
-
CarstenJ schrieb:
Ist das jetzt Ironie ?
Du hast es erfasst...
@xy
sry, recht hast du.
-
@ CarstenJ: Bist Du Dir sicher, dass das Dein Beispiel so funktionieren kann? Warum nicht einfach reverse(str.rbegin(),str.rend()); (ohne den Rest)?
-
So reichts.
int main(int argc, char* argv[]) { string str; getline(cin,str); reverse(str.rbegin(),str.rend()); cout << str; return 0; }
-
Hallo,
@Asgard: hast natürlich recht. Aber jetzt haben wir ja eine funktionierende Lösung.
Wobei: Ich hatte vergessen, dass die STL auch einen Algo "reverse" zur Verfügung stellt. Bei meiner Version hieß der umgekehrte String eben reverse, was natürlich Käse ist. Wenn man den Algo "reverse" benutzt, braucht man auch kein rend bzw. rbegin:
reverse(str.begin(), str.end()); // Tuts auch...
-
[nix]
-
Hallo,
wozu dreht ihr den String physich um, wenn er nur in umgekehrter Reihenfolge ausgegeben werden soll?aber ich muss diese dann auch noch rückwärts wieder ausgeben
Da steht nichts von: "Ich muss ein zweites Stringobjekt erzeugen".
Also:
string eingabe = "Hallo Welt"; cout << eingabe << endl; // und jetzt andersherum copy(eingabe.rbegin(), eingabe.rend(), ostream_iterator<char>(cout));
Zu einfach?
-
Da steht nichts von: "Ich muss ein zweites Stringobjekt erzeugen".
Tut mir leid, aber von einem zweiten string Objekt sehe ich da nix ????
-
noproblem schrieb:
Da steht nichts von: "Ich muss ein zweites Stringobjekt erzeugen".
Tut mir leid, aber von einem zweiten string Objekt sehe ich da nix ????
Schau dir doch mal CarstenJs zweiten Beitrag an.
Dort ist ein zweites Stringobjekt namens reserve. Andere hier angebotene Alternativen drehen ebenfalls den String physich um. Sie erzeugen zwar kein zweites Objekt, manipulieren aber das erste, was letztlich die selben Konsequenzen hat.Mein Punkt ist schlicht und einfach, dass es keinen Grund gibt, dass Originalobjekt zu verändern bzw. ein neues Objekt zu erstellen, nur weil man den String rückwärts ausgeben will.
-
Ok.Verstanden.
-
Ich hab das ähnliche Problem mit einem Quellcode der mir eine umgekehrte Zeichenkette liefern soll.
#include <stdio.h>
#define MAXLINE 1000 /* Maximale Länge einer Eingabenzeile */
int getline(char line[], int maxline);
void copy(char to[], char from[]); /* Durch den Befehl void der mit dem Befehl gekoppelt wurde, wird kein Resultat zurückgeliefert. An sich ist das auch logisch, denn der Wert soll nur kopiert werden und nicht an copy zurückgeliefert werden. Es findet hier eine reine Wertübertragung statt, die keine Rückkoppelung benötigt.*/
main(void)
{
int len; /* Länge der momentanen Eingabezeile /
int max; / bisheriges Maximum /
char line[MAXLINE]; / momentane Eingabezeile /
char longest[MAXLINE]; / bisher längste Zeile */max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max)
{
max = len;
copy(longest, line); /* Der Programmcode greift auf die Funktion Copy zurück, wonach die längste Zeichenkette kopiert wird. /
}
if (max > 0) / es gab überhaupt eine Zeile /
printf("%s", longest);
return 0; / Der Wert wird zurückgeliefer an den Aufrufer (main) durch den Return-Befehl. */
}/* getline: Zeile an s, Länge als Resultat. So lautet der Grundsatz in dieser Funktion, mit der man versucht wiederum etwas Transparenz zu schaffen. */
int getline(char s[], int lim)
{
int c, i;for (i = 0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if (c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}/* copy: 'from' nach 'to' kopieren; 'to' muss gross genug sein */
void copy(char to[], char from[])
{int i;
i = 0;
while((to[i] = from[i]) !='\0') /* Jede Zeichenkette enthält am Ende ein '/0', wonach dieses Zeichen nicht in einem normalen Text vorkommt. Es wird einfach vom Programm als Zeichenkettenende interpretiert. */
++i;
}
Der Programmcode lautet so, aber mir ist nicht ganz klar, inwiefern ich da eine Reverse-Funktion einbauen kann !
-
Also ohne Code-Tags, viel zu schwer zu lesen. Und ausserdem: Wo ist da C++?
mfg
v R
-
Sorry hab hier einen C-Quellcode vor mir liegen, daher war des nur einfach falsch gepostet gewesen !
-
cHillb3rT schrieb:
Sorry hab hier einen C-Quellcode vor mir liegen, daher war des nur einfach falsch gepostet gewesen !
War auch nich boes gemeint. Du kannst deinen Beitrag editieren und noch
die cpp-Tags drum rum machen. Dann kann man den Code gleich besser lesen.mfg
v R