tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
948
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ai-gamecock Tutorials.de Gastzugang
    Hi!
    Hab schon gesucht aber nichts gefunden was mir hilft;
    wie kann ich aus einem String die Position des x-ten Vorkommens eines Teilstrings (bzw Zeichens) (möglichst als Integer) auslesen?
    z.B.: Ich möchte aus diesem String:
    String text="1*125152*250178*tree_normal_1*0*0*0**";
    die zweite und dritte Zahl auslesen, die Zahlen sind aber Variabel und können daher auch mal kürzer sein als im Beispiel, d.h. text.SubString(3,6) geht nicht immer.
    Ich hab schon mal was von find_first_of() oder so gehört, allerdings weis ich nichts über die Anwendung dieses Befehls, der Autor hat gespart und nach meiner Nachfrage nicht mehr geantwortet.
    Der Befehl .Find(String,int) geht nur bei Stringlisten (obwohl er meiner Meinung nach ideal wäre), und der Befehl text.Pos(String) liefert nur den ersten oder letzten (mein ich zumindest)
    Wer helfen kann, soll dies bitte (möglichst bald) tun! Danke!
     

  2. #2
    Test Test ist offline Mitglied Gold
    Registriert seit
    Jul 2003
    Beiträge
    181
    Ist zwar ein Delphicode, doch sollte es kein Problem sein den nach C++ zu übertragen:

    http://www.swissdelphicenter.com/en/...de.php?id=1195
     

  3. #3
    deepthroat deepthroat ist gerade online Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Die Klasse std::string besitzt eine Methode "find" die einen Substring in einem String findet und die Position zurückgibt. Falls das gesuchte Wort nicht in dem String vorkommt, gibt string::find den speziellen Wert "string::npos" zurück. Der zweite Parameter der Funktion ist ein Offset ab dem die Suche gestartet werden soll.
    Code :
    1
    2
    
    size_type find (const string& str, size_type pos=0) const;
    size_type find (char ch, size_type pos=0) const;
    Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    #include <string>
     
    using namespace std;
     
    string str ("cat dog mice cat dog mice cat");
     
    for (int i = str.find ("cat");
          i != string::npos;
          i = str.find (cat, i+1)) {
       /* ... */
    }

    Diese Methode kann man auch mit einem einzelnen Zeichen aufrufen (denn bei dir scheint ja '*' ein Trennzeichen zu sein, oder?).

    Ansonsten findet man auch viele Beispiele für string::find und string::find_first_of, string::find_first_not_of etc. mit Google.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    ai-gamecock Tutorials.de Gastzugang
    mir scheint du hast meinen Text nicht wirklich gelesen.
    wenn ich str.Find hinschreibe, erscheint die Fehlermeldung 'find' is not a member of 'AnsiString', was so viel bedeutet wie: des geht so nicht. Liegt des jetzt am BCB6, an meinem System oder daran, dass es halt nicht geht?
    es geht auch nicht, wenn ich
    Code :
    1
    2
    
     #include <string>
    using namespace std;
    reinschreibe.
    und wo soll ich des:
    Code :
    1
    2
    
    size_type find (const string& str, size_type pos=0) const;
    size_type find (char ch, size_type pos=0) const;
    hintippen?
     

  5. #5
    deepthroat deepthroat ist gerade online Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Mein Text bezog sich auf die Standard C++ Bibliothek und die string Klasse die es da gibt. Wenn du was anderes benutzt, mußt du doch eigentlich besser wissen wie du damit umgehen mußt.

    Du könntest deinen AnsiString in einen std::string konvertieren und dann die erwähnten Methoden auf diesen String anwenden:
    Code :
    1
    2
    3
    4
    5
    6
    
    #include <string>
     
    AnsiString s;
    std::string str (s.c_str( ));
     
    int i = str.find( ':' ); /* ... */

    Vorausgesetzt dein BCB besitzt den <string> Header.

    und wo soll ich des:
    Code :
    1
    2
    
     
    size_type find (const string& str, size_type pos=0) const; size_type find (char ch, size_type pos=0) const;
    hintippen?
    Nirgendwo. Das sind die Deklarationen für die besprochenen Methoden so wie sie in der string Klasse der Standard C++ Bibliothek stehen. Das hab ich nur zitiert damit du auch genau weißt wie es geschrieben ist. Wie willst du sonst wissen wie du es aufrufen kannst?
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    deepthroat deepthroat ist gerade online Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    OK. Was bei std::string "find" ist, ist bei AnsiString "Pos".

    AnsiString str;

    int i = str.Pos(":");

    Is doch alles ganz einfach.

    PS: Haste denn keine Referenz/Handbuch oder sowas?
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    ai-gamecock Tutorials.de Gastzugang
    hallo erstmal
    hab ja lang genug auf mich warten lassen

    erstmal zu deinem PS: nein, ich habe kein handbuch. zumindest nicht wirklich, des einzige was ich hab is "C++ für Kids", nicht schlecht des buch, aber sobalds etwas professioneller wird hilft einem des buch nicht mehr weiter.

    und zu allem anderen was geschrieben wurde: ich schaus mir bei gelegenheit an, vorausgesetzt ich mach noch viel mit C++; ich bin mehr oder weniger auf C# umgestiegen.

    aber trotzdem danke,
    aigc
     

Ähnliche Themen

  1. Position eines Elements in einem Listenfeld bestimmen.
    Von visiondpc im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 04.08.08, 07:35
  2. Antworten: 3
    Letzter Beitrag: 09.04.08, 00:57
  3. Index (Position) eines Elementes in einem Array ausgeben
    Von Grille im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 24.01.08, 12:40
  4. Position eines Wortes in einem String ermitteln
    Von spex im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 28.12.07, 10:44
  5. Antworten: 2
    Letzter Beitrag: 11.07.06, 13:08