eine Zahl aus einem String filtern



  • Hallo zusammen,

    Ich suche eine Methode die eine Zahl aus einem String filtert.
    String in der Form: "Das Fass hat 1000L"

    Ergebnis soll sein: 1000

    Gibt es sowas überhaupt in fertiger Form?
    oder muss ich mir da doch was selber schreiben?

    Also im Internet suche ich schon länger, habe aber nichts passendes gefunden.

    Gruß

    Cospieler



  • Diese Aufgabe kann man mit Regex lösen.

    Hier ein Beispiel:

    using namespace System;
    using namespace System::Text::RegularExpressions;
    
    int main()
    {
        auto input = gcnew String("Das Fass hat 1000L");
        auto match = Regex::Match(input, R"((\d+))");
        if (match->Success)
        {
            auto number = Int32::Parse(match->Value);
            Console::WriteLine("Die Zahl ist {0}", number);
        }
    
        return 0;
    }
    


  • Danke theta

    von Regex habe ich noch nichts gelesen,
    aber auf Parse.

    Werde mir bei nächster Gelegenheit, den Code genauer anschauen.

    Danke nochmal



  • Ich habe mir mal dein Code angesehen ist auch soweit logisch.

    Habe es versucht in Visual Studio 2010 C++ zu laufen zu bringen.
    Leider ohne Erfolg.
    Alle Versuche sind bei mir gescheitert.
    Herr Google konnte mir auch noch nicht weiter helfen.
    Suche aber immer noch.

    #include "stdafx.h"
    
    using namespace System;
    using namespace System::Text::RegularExpressions;
    
    int main(array<System::String ^> ^args)
    {
        auto input = gcnew String("Das Fass hat 1000L");
        auto match = Regex::Match(input, R"((\d+))");
        if (match->Success)
        {
            auto number = Int32::Parse(match->Value);
            Console::WriteLine("Die Zahl ist {0}", number);
        }
        return 0;
    }
    

    Fehlerbericht:

    1>------ Erstellen gestartet: Projekt: Beispiel-Zahl-in-String-filtern-CLR-Konso, Konfiguration: Debug Win32 ------
    1> Beispiel-Zahl-in-String-filtern-CLR-Konso.cpp
    1>Beispiel-Zahl-in-String-filtern-CLR-Konso.cpp(11): warning C4129: 'd': Nicht erkannte Folge von Escapesequenz
    1>Beispiel-Zahl-in-String-filtern-CLR-Konso.cpp(11): error C2065: 'R': nichtdeklarierter Bezeichner
    1>Beispiel-Zahl-in-String-filtern-CLR-Konso.cpp(11): error C2143: Syntaxfehler: Es fehlt ')' vor 'Zeichenfolge'
    1>Beispiel-Zahl-in-String-filtern-CLR-Konso.cpp(11): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • Die R-Syntax ist erst ab C++11 vorhanden.
    Probiere daher

    auto match = Regex::Match(input, "\\d+");
    


  • Danke Th69

    Das war die Lösung.

    Hier nochmal der geänderte Code:

    #include "stdafx.h"
    
    using namespace System;
    using namespace System::Text::RegularExpressions;
    
    int main(array<System::String ^> ^args)
    {
        auto input = gcnew String("Das Fass hat 1000L");
        auto match = Regex::Match(input, "\\d+");
        if (match->Success)
        {
            auto number = Int32::Parse(match->Value);
            Console::WriteLine("Die Zahl ist {0}", number);
        }
    	Console::WriteLine("");
    	Console::WriteLine("Eine Taste betätigen um zu beenden.");
    	Console::ReadLine();
        return 0;
    }
    

Log in to reply