Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   c++ : String in Klammern packen (https://www.delphipraxis.net/86230-c-string-klammern-packen.html)

dummer_info_schüler 11. Feb 2007 12:30


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:
char* brackets2 (char* eingabe)
{
   return ('(' + eingabe + ')'+'\0');
}
und

Code:
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;
}
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?]

Bin nun leider sehr ratlos und hoffe auf eure Hilfe :-D

Schon mal Danke.

turboPASCAL 11. Feb 2007 12:43

Re: c++ : String in Klammern packen
 
Wird in C ein String nicht mit " eingegrenzt ?

DGL-luke 11. Feb 2007 12:46

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:

BCBfe 11. Feb 2007 13:12

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:
char ret[256];
strcpy(ret, "(");
strncat(ret, eingabe, 253);
strcat(ret, ")");
Achtung Edit: Man kann ret jetzt nicht einfach als Ergebnis der Funktion zurückgeben,
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:
std::string brackets2(char* eingabe)
{
  std::string ret("(");
  ret += eingabe;
  ret += ")";

  return ret;
}
Wenn man das Ergebnis dann als char* braucht, kann man das so verwenden:

Code:
brackets2("Test").c_str();
Hope that helps.

Frank

dummer_info_schüler 11. Feb 2007 13:50

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!

BCBfe 11. Feb 2007 13:51

Re: c++ : String in Klammern packen
 
Zitat:

Zitat von BCBfe
Hope that helps.

Sorry für die Edits im vorherigen Beitrag. Ich hatte nur nach dem String zusammenfügen geschaut und einen anderen Fehler in deinem Code übersehen. Du kannst nicht in einer Function ein Array anlegen und einen Zeiger darauf als Rückgabewert zurückgeben. Nach dem Funktionsaufruf ist das Array weg und der Zeiger zeigt auf ungültigen Speicher.
Das sollte in Delphi aber auch so sein.

Wenn es also unbeding C sein soll

Code:
char* brackets(char* eingabe)
{
  char* ret = malloc(strlen(eingabe) + 3);
  strcpy(ret, "(");
  strcat(ret, eingabe);
  strcat(ret, ")");

  return ret;
}
Der zurückgegebene Pointer muss mit free wieder freigegeben werden.

Mit reinen C++-Strings sähe es so aus:

Code:
std::string brackets2(const std::string& eingabe)
{
  std::string ret("(");
  ret += eingabe;
  ret += ")";

  return ret;
}
Tschüß

Frank

dummer_info_schüler 11. Feb 2007 13:55

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*

BCBfe 11. Feb 2007 14:01

Re: c++ : String in Klammern packen
 
Zitat:

Zitat von dummer_info_schüler
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*

Bitte, gern geschehen.

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