string-element über eine Funktion "trimmen"
-
Du mußt quasi den von mir erwähnten Konstruktor nachbauen, d.h. mittels einer Schleife die einzelnen Zeichen per
+=
(zu einer neuenstring
-Variable) hinzufügen (und vorher die passenden Indizes für die Schleife berechnen).
-
@Th69 okay danke ich versuch das mal
-
du könntest auch sowas machen:
int numplus; //anzahl der plusse am anfang zählen numplus = 0; for(int i = 0; i < str.length(); i++) { if(str[i] != '+') { break; } numplus++; } //alle zeichen hinter dem letzten vorderen plus nach "vorne" kopieren for(int i = 0; i < str.length() - numplus; i++) { str[i] = str[i + numplus]; } //alle plusse am ende der zeichenkette löschen for(int i = str.length() - 1; i >= 0; i--) { if(str[i] == '+') { str[i] = 0; } else { break; } }
-
@Wade1234 sagte in string-element über eine Funktion "trimmen":
//alle plusse am ende der zeichenkette löschen
for(int i = str.length() - 1; i >= 0; i--)Huiuiui...
Ich würde von dieser Variante abraten. Insbesondere wenn man mal einen Leerstring einsetzen will
Ich vermute, dass man es so machen soll:
string trimme(string s) { // const string &? oder hattet ihr das noch nicht? size_t end_idx = s.length(); while (end_idx && s[end_idx - 1] == '+') --end_idx; size_t start_idx = 0; while (s[start_idx] == '+') ++start_idx; string result; for (int i = start_idx; i < end_idx; ++i) result += s[i]; return result; }
-
@wob daanke ich versuch das jetzt mal zu verstehen, aber es funktioniert!
thema referenzen hatten wir und dürfen wir auch verwenden
-
@wob size_t dürfen wir leider nicht verwenden, gibt dafür eine alternative?
-
@wob hab schon gesehen unsigned int geht auch
-
@mmm_1482_ sagte in string-element über eine Funktion "trimmen":
@wob size_t dürfen wir leider nicht verwenden, gibt dafür eine alternative?
Merkwürdig. Denn was für ein Typ kommt denn von
length()
zurück? Schau mal auf http://www.cplusplus.com/reference/string/string/length/
-
@wob sagte in string-element über eine Funktion "trimmen":
Denn was für ein Typ kommt denn von length() zurück?
std::string::size_type
-
@wob verstehe schon was bedeutet... aber leider dürfen wir das trotzdem nicht verwenden ist echt nervig.. wenn ich im netz nach lösungswegen suche, kann ich die hälfte davon meist gar nicht verwenden
-
@wob ich hab mir das mal etwas umstrukturiert. In dieser form ist es für mich sehr viel nachvollziehbarer vielen dank nochmal!
string trimme(string s)
int start = 0; do { start++; } while(s[start] == '+'); int ende = s.length(); do { ende--; } while (ende && s[ende - 1] == '+'); string ergebnis; for (int i = start; i < ende; i++) { ergebnis += s[i]; } return ergebnis;
};
-
@mmm_1482_ sagte in string-element über eine Funktion "trimmen":
aber leider dürfen wir das trotzdem nicht verwenden
Das bezweifel ich. Es geht darum, dass ihr nicht so programmiert, wie man es eigentlich machen würde, sondern dass ihr euch selber irgendwas ausdenkt. Ob in deinem Algorithmus nun als Länge int, unsigned, size_t oder was auch immer verwendet wird, ist echt komplett egal.
Du darfst ja length() verwenden, aber den Rückgabewert nicht nutzen? Das ist doch offenbar quatsch.
-
@mmm_1482_: Was für eine komische Ausbildung machst du denn? So wirst du nie vernünftig C++ lernen!
Genau die Lösung von @wob meinte ich, aber schade, daß du nicht zuerst darauf gekommen bist...
PS: Deine Lösung ist falsch (wenn am Anfang oder Ende keine
'+'
vorhanden sind bzw. ein Leerstring übergeben wird).
Beim Testen immer die Randfälle beachten.
-
@Th69 ich mach keine ausbildung.. studiere interdisziplinär und habe grundlagen der informatik als modul... muss nur dieses fach bestehen ... ich will keine programmiererin werden dafür bin ich offenwsichtlich unbegabt
oh.. hast recht XD ja okay ich belasse es dann doch bei dem vorherigen ergebnis von wob
-
@Jockelx hmm kann sein, dass wir das doch dürfen. Ich lass nur meistens die finger von Methoden, die wir nicht in den vorlesungen besprochen haben
-
@mmm_1482_ sagte in string-element über eine Funktion "trimmen":
oh.. hast recht XD ja okay ich belasse es dann doch bei dem vorherigen ergebnis von wob
Naja, du kannst meine Lösung schon umschreiben (warum auch nicht, Übung macht den Meister!). Du sollst sie ja verstehen. Und du solltest auch verstehen, warum sie korrekt ist. Warum ich beim start_idx im while zum Beispiel nicht auf die Länge checken muss, sollte dir klar sein. Wenn nicht, bau da noch einen Check ein...
Vielleicht noch generell: ich habe früher gedacht, dass man
do {...} while(...)
oft braucht. Ich habe aber festgestellt, dass man das nur sehr selten benötigt undwhile(...) { ... }
, also mit Check am Anfang, viel häufiger sinnvoll ist.
-
Dieser Beitrag wurde gelöscht!
-
@mmm_1482_ sagte in string-element über eine Funktion "trimmen":
@wob ich hab mir das mal etwas umstrukturiert. In dieser form ist es für mich sehr viel nachvollziehbarer vielen dank nochmal!
string trimme(string s)
int start = 0;
do
{
start++;
} while(s[start] == '+');int ende = s.length();
do
{
ende--;
} while (ende && s[ende - 1] == '+');string ergebnis;
for (int i = start; i < ende; i++)
{
ergebnis += s[i];
}return ergebnis;
};du musst dein int start = 0 auf -1 setzen weil start direkt im ersten durchlauf auf 1 geht und bei int ende = s.length() musst du int ende = s.length() +1 setzen
-
Den Thread hat ein Bot nekromantiert. Die Fragen sind längst beantwortet. Geschlossen.