![]() |
c++ : String in Klammern packen
Hallo,
ich zweifel grad an mir selbst, weil ich daran scheiter, zu einem String, der eingegeben wird, denselben String nur mit Klammern ringsrum zurückzugeben... Ich hatte zwei Ansätze, die beide nicht so funktionieren, wie sie sollen :?
Code:
und
char* brackets2 (char* eingabe)
{ return ('(' + eingabe + ')'+'\0'); }
Code:
Ich hab´s auch mit unterschiedlichen Terminierungen für die char* probiert (also mit 0, mit '0', mit '\0'), da ich dazu leider auch nichts gefunden habe :-( [Frage am Rande: Was ist nun eigentlich richtig?]
char* brackets (char* eingabe)
{ char erg[258]; erg[0]='('; int k = 0; while (*(eingabe +k)!=0) { erg[k+1]= *(eingabe + k); k++; } erg[k]=')'; erg[k+1]= 0; return erg; } Bin nun leider sehr ratlos und hoffe auf eure Hilfe :-D Schon mal Danke. |
Re: c++ : String in Klammern packen
Wird in C ein String nicht mit " eingegrenzt ?
|
Re: c++ : String in Klammern packen
musst du das eingabe nicht auf irgendwas casten, damit die c++-magie da auch wirken (und aus einem "PChar" einen ganzen string machen) kann? gibt auch funktion wie "strconcat" für sowas... ich hab natürlcih von der STL null ahnung :stupid:
|
Re: c++ : String in Klammern packen
Hallo,
eigentlich stöbere ich als C++-Builder User gelegentlich nur hier durch, aber in diesem speziellen Fall kann ich das Elend nicht mit ansehen. :P Also in C geht das z.B. so
Code:
Achtung Edit: Man kann ret jetzt nicht einfach als Ergebnis der Funktion zurückgeben,
char ret[256];
strcpy(ret, "("); strncat(ret, eingabe, 253); strcat(ret, ")"); da das Array ja lokal innerhalb der Funktion erzeugt wird. Man müsste den Speicher entweder dynamisch mit malloc anlegen oder einen Zeiger als Parameter übergeben. in C++ würde ich das eher so machen
Code:
Wenn man das Ergebnis dann als char* braucht, kann man das so verwenden:
std::string brackets2(char* eingabe)
{ std::string ret("("); ret += eingabe; ret += ")"; return ret; }
Code:
Hope that helps.
brackets2("Test").c_str();
Frank |
Re: c++ : String in Klammern packen
Hallo,
@TurboPascal: Bei mir hatte er gemeckert "invalid operands of types 'const char[2]' and 'char*' to binary 'operator+'" wenn ich die Zeichen in doppelten Anführungsstrichen geschrieben hatte => Ich wollte es ja auch als Char vorn und hinten anhängen... ein "Strconcat" hatte ich leider nicht gefunden, aber die Lösung von BSBfe hat super funktioniert, Danke an alle :thumb: Ich glaube, mein Hauptproblem war das std von "std::string". Ich hatte auch ein paar Tests mit Stringoperationen, aber da bekam ich immer die Fehlermeldung, dass er String nicht kenne, obwohl ich das extra included hatte :oops: Muss mich wohl noch eine Menge damit beschäftigen... Auf jeden Fall noch mal ein dickes Dankeschön! |
Re: c++ : String in Klammern packen
Zitat:
Das sollte in Delphi aber auch so sein. Wenn es also unbeding C sein soll
Code:
Der zurückgegebene Pointer muss mit free wieder freigegeben werden.
char* brackets(char* eingabe)
{ char* ret = malloc(strlen(eingabe) + 3); strcpy(ret, "("); strcat(ret, eingabe); strcat(ret, ")"); return ret; } Mit reinen C++-Strings sähe es so aus:
Code:
Tschüß
std::string brackets2(const std::string& eingabe)
{ std::string ret("("); ret += eingabe; ret += ")"; return ret; } Frank |
Re: c++ : String in Klammern packen
Dann nochmal danke für den Hinweis; ich werds nachher mal ausprobieren (sollte nur erstmal für ne Klausur lernen^^).
Bin für wirklich jeden Hinweis dankbar, muss halt noch ne Menge lernen *seufz* |
Re: c++ : String in Klammern packen
Zitat:
Das "std" kann man übrigens auch weglassen. Das sähe ungefähr so aus:
Code:
#include <string>
using namespace std; string brackets2(const string& eingabe) { string ret("("); ret += eingabe; ret += ")"; return ret; } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz