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 < [ 2 ]
000
06.11.2007, 08:38 Uhr
~Gast
Gast


Hallo!
Ich habe folgendes Problem. Ich exportiere eine MRZ-Zeile als String in eine Textdatei. Dieser String soll anschließend mit einem PHP Script ausgelesen und weiter verarbeitet werden. Der String hat etwa das folgende Format: <<Max<<<Mustermann<<<...
So lange allerdings noch "<" in dem String stehen, kann das Script die Zeile nicht korrekt einlesen. Ich brauche jetzt also eine Funktion die mir die "<" durch beispielsweise "-" ersetzt. Bin leider ziemlich in C++ und bitte daher um leicht verständliche Hinweise.

Danke im Voraus
Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.11.2007, 10:42 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Na im Zweifelsfall einfach mit ner Schleife drüberlaufen und nach '<' schauen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.11.2007, 10:54 Uhr
~Gast
Gast


Danke für die schnelle Antwort!
Das ist auch mein Ansatz. Aber C++ scheint mir bezüglich String-Verarbeitung sehr unvorteilhaft zu sein, weshalb ich da auch nicht wirklich voran gekommen bin. Mit welcher Funktion kann ich denn noch bestimmten Zeichen suchen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.11.2007, 11:09 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von ~Gast:
Aber C++ scheint mir bezüglich String-Verarbeitung sehr unvorteilhaft zu sein

Da täuschst du dich, aber wie wäre es mit einem entsprechendem (online)Buch welches die Grundlagen erläutert?


Ansonsten brauchst du bei diesem einfachen Ansatz keine speziellen Funktionen, du läufst wie gesagt einfach mit einer Schleife über den String und prüfst ob das aktuelle Zeichen == '<' ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.11.2007, 12:24 Uhr
~Gast
Gast


Also ich hab das jetzt mal folgendermaßen versucht:


C++:
    for (i = 0;i<sizeof(m_strMrzLine1.c_str());i++)
    {
        if (m_strMrzLine1.c_str()[i] == "<")
        {
                m_strMrzLine1.c_str()[i] == "-";
        }
    }



Gibt da leider noch nen Fehler. "Konvertierung von char nach char* nicht möglich"
Was könnte ich jetzt tun?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.11.2007, 12:32 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also das sizeof ist falsch im Schleifenkopf. std::string müsste eigentlich einen Length Parameter oder eine entsprechende Funktion haben die dir die Länge liefert.
Dann solltest du auch einfach m_strMrzLine1[i] schreiben können und du musst deine Zeichen in einfache Anführungszeichen setzten, also '<' weil du sonst eine Zeichenkette hast und du willst ja nur ein einzelnes Zeichen.

Bin mir gerade auch nicht sicher ob std::string nicht schon eine replace Methode anbietet...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.11.2007, 13:34 Uhr
~Gast
Gast


Es hat funktioniert! Ich hab das jetzt folgendermaßen gelöst:

C++:
    for (i = 1;i_zaehler<m_strMrzLine1.Length()+1;i++)
    {
        if (m_strMrzLine1[i] == '<')
        {
                m_strMrzLine1[i] = '-';
        }
    }



Danke für die Geduld mit mir!

Gruß
Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.11.2007, 14:37 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Warum initialisierst du i mit 1? Willst du das erste Zeichen nicht prüfen?

Das Length()+1 ist auch falsch, damit liest du ein Zeichen zuviel, wodurch dir den Speicher zerschießen kannst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.11.2007, 15:03 Uhr
stephanw
localhorst



Zitat von Guybrush Threepwood:
Bin mir gerade auch nicht sicher ob std::string nicht schon eine replace Methode anbietet...
Ja, wird sogar in diversen Varianten angeboten. Aber leider nicht in der einfachen und intuitiven Art
s.replace('>','-');
sondern nur in Varianten, denen man in Form zweier Iteratoren einen Bereich übergibt, dessen Zeichen dann ersetzt werden.
Insofern ist String-Bearbeitung in (Standard-)C++ nicht so toll. Eigentlich eine schwache Leistung des Standards. Genauso gut könnte man Funktionen wie contains(string s) oder startsWidth(string s) und endsWith(string s) erwarten, um nicht immer mit string::npos vergleichen zu müssen.

--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.11.2007, 21:01 Uhr
0xdeadbeef
Gott
(Operator)



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

// ...

std::string s = "foo<<bar<<baz";
std::replace(s.begin(), s.end(), '<', '-');


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: