AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

c++ : String in Klammern packen

Ein Thema von dummer_info_schüler · begonnen am 11. Feb 2007 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
dummer_info_schüler

Registriert seit: 28. Mär 2004
Ort: Cottbus
26 Beiträge
 
#1

c++ : String in Klammern packen

  Alt 11. Feb 2007, 13:30
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

Schon mal Danke.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 13:43
Wird in C ein String nicht mit " eingegrenzt ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 13:46
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
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
BCBfe
(Gast)

n/a Beiträge
 
#4

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 14:12
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.

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
  Mit Zitat antworten Zitat
dummer_info_schüler

Registriert seit: 28. Mär 2004
Ort: Cottbus
26 Beiträge
 
#5

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 14:50
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

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
Muss mich wohl noch eine Menge damit beschäftigen...

Auf jeden Fall noch mal ein dickes Dankeschön!
  Mit Zitat antworten Zitat
BCBfe
(Gast)

n/a Beiträge
 
#6

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 14:51
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
  Mit Zitat antworten Zitat
dummer_info_schüler

Registriert seit: 28. Mär 2004
Ort: Cottbus
26 Beiträge
 
#7

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 14:55
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*
  Mit Zitat antworten Zitat
BCBfe
(Gast)

n/a Beiträge
 
#8

Re: c++ : String in Klammern packen

  Alt 11. Feb 2007, 15:01
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;
}
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz