Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeichen in string ersetzen

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
02.06.2003, 16:27 Uhr
~Frank
Gast


Hallo.

Ich suche eine Möglichkeit bestimmte Zeichen eines Strings zu ersetzen.
Der String darf anschließend keine Leerzeichen und nur bestimmte Sonderzeichen enthalten. Leerzeichen möchte ich gegen Unterstrich tauschen. Und bestimmte Sonderzeichen (z.B. ß%) gegen Bindestrich.

Ich würde da jetzt anfangen in C in ner For Schleife die einzelnen Zeichen durchzugehen. Gibt es da noch ne schönere Möglichkeit (C++)?

mfg Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.06.2003, 16:34 Uhr
~0xdeadbeef
Gast


Wenn du mit schöner schneller meinst, nein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.06.2003, 17:31 Uhr
~Frank
Gast


Nee, meine einfacher.

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.06.2003, 18:11 Uhr
~0xdeadbeef
Gast


Was ist an

C++:
int i, len = strlen(str);
for(i = 0; i < len; ++i) {
    if(isblank(str[i])) str[i] = '_';
    else if(strchr("\"§$%&/(){[]}ß*hier Sonderzeichen einfügen*", str[i]) != NULL) str[i] = '-';
}


schwierig?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.06.2003, 19:32 Uhr
Pablo
Supertux
(Operator)


Du musst auf jeden Fall eine For- bzw. While-Schleife implementieren, denn du musst jedes einzelnes Element von char array nach Leerzeichen und Sonderzeichen überprüfen. Ich würde sagen, anders geht nicht, obwohl es andere Lösungen geben kann, aber die For Schleife von @~0xdeadbeef hätte ich auch gemacht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.06.2003, 20:19 Uhr
~Frank
Gast


Nagut mach ich's so. Hätt ja sein können das es irgendeine STL
string Methode gibt, die mir z.B. alle Leerzeichen eines Strings in einem Rutsch ersetzen kann.

Danke,
Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.06.2003, 21:21 Uhr
virtual
Sexiest Bit alive
(Operator)


Natürlich bietet die STL nicht exakt die Lösung, die Du brauchst, weil Dein Problem ja recht speziell ist. Aber sie stellt Dir komfortable Algorithmen zur Verfügung, mit deren Hilfe man sowas machen kann.
Man sieht, daß man mit nichten darauf angewiesen ist, explizit eine for-Schleife zu programmieren. Macht man den Operator recorder::operator() inline, so wird man auch gegenüber einer herkömmlichen for Schleife aus C keine Performanceverluste haben.


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

struct recoder
{
    char operator () (char c)
    {
        if (std::isspace(c)) return '_';
        if (std::ispunct(c)) return '-';
        return c;
    }
};

int main()
{
    std::string line;
    std::getline(std::cin, line);

    std::transform(line.begin(), line.end(), line.begin(), recoder());

    std::cout<<line<<std::endl;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.06.2003, 09:21 Uhr
~Frank
Gast


Na das sieht doch schon recht elegant aus :-)
Hab zwar mit Funktionsobjekten bislang noch nicht viel zu tun gehabt, ist aber mal ein sinnvolles Einsatzgebiet.

Gruß Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.06.2003, 17:05 Uhr
ai-tee



Wozu gehört denn dieses std?
--
Greetz, ai`tee
 
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: