Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string map (ersetzen eines teilstrings)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.04.2005, 15:21 Uhr
CHris08156



Ich suche eine string map function:


Code:
  char *string = new char;
  string = "This is a simple string";
  char *what = new char;
  what = "simple";
  char *with = new char;
  with = "new";

  string_map (string, what, with);
  cout << string << endl;



rauskommen sollte: "This is a new string"

für die funktion habe ich folgenden Quelltext:


Code:
int string_first(char *string, char *what) {
    char *pch = strstr (string, what);
    int i = 0;
    while (string+i != pch && i < strlen(string)) {
        i++;
    }
    if (i == strlen(string) ) {
        return -1;
    } else {
        return i;
    }
}

int string_map (char *string ,char *what, char *with) {
  char *pch;
  pch = strstr (string,what);
  int first = string_first(string, pch);

  char *out = new char[first];
  strncpy(out, string, first);
  out[first] = '\0';
  strcat(out, with);

  int len = strlen(string)-first-strlen(what)+1;
  char *rest = new char[len];
  rest = string+first+strlen(what);

  strcat(out, rest);

  string = out;
  return 0;
}



Wenn der neue string (what) nicht länger ist als der zu ersetzende string (with) funktioiniert es.
aber sobald what länger ist als with, gibt es einen Programmabsturz.

Dieser Post wurde am 19.04.2005 um 15:52 Uhr von CHris08156 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.04.2005, 15:42 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du schon C++ machst, benutz std::string.

C++:
#include <iostream>
#include <string>

using namespace std;

int main() {
  string s = "This is a simple string.";
  s.replace(s.find("simple"), string("simple").size(), "new");
  cout << s << endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.04.2005, 16:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ansonsten liegt der fehler daran das du dem string-pointer nen konstanten (evtl zu kurzen) String zuweist


C++:
char *string = new char;
string = "This is a simple string"; /* speicherleck, string wird neu zugewiesen */
char *what = new char;
  what = "simple"; // genauso hier
  char *with = new char;
  with = "new";// genauso hier



du meinst sicher sowas:


C++:
char string[512]; // platz für 512 zeichen
strcpy(string,"This is a simple string");
char what[512]; // platz für 512 zeichen
strcpy(what,"simple");
char with[512]; // platz für 512 zeichen
strcpy(with,"new");



dann sollte es auch klappen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: