Wörter in Arrays



  • Hallo zusammen, gibt es eine Möglichkeit (ich weiß unter C# gibt es die nicht, habe aber gehört, dass es unter C++ eine Möglichkeit geben kann) einen eindimensionalen Array mit Wörtern zu machen.
    Danke



  • #include <map>
    #include <string>
    
    int main()
    {
        std::map<std::string, int> myMap;
    
        myMap.insert(std::make_pair("first", 1));
        myMap.insert(std::make_pair("second", 2));
    
        myMap["third"] = 3;
        myMap["first"] = 4;
    
        return 0;
    }
    


  • Cardiac schrieb:

    #include <map>
    #include <string>
    
    int main()
    {
        std::map<std::string, int> myMap;
    
        myMap.insert(std::make_pair("first", 1));
        myMap.insert(std::make_pair("second", 2));
        
        myMap["third"] = 3;
        myMap["first"] = 4;
        
        return 0;
    }
    

    Und das Array ist wo?



  • error: map is not a member of std



  • std::string a[100];
    

    Und jetzt erkläre mal, was du wirklich willst.



  • manni66 schrieb:

    Und das Array ist wo?

    Da Siralle grundsaetzlich keine konkreten Fragen formuliert, habe ich einfach mal angenommen das er ein associative array haben will...



  • manni66 schrieb:

    std::string a[100];
    

    Und jetzt erkläre mal, was du wirklich willst.

    ich? ich will sowas in C++ machen

    $wochentag = array('montag','dienstag','mittwoch','donnerstag','freitag');
    foreach($wochentag as $tag){
    $zaehlen = substr_count($satz, $tag);
    if ($zaehlen >1) {
    echo "Es ist ein Wochentag"; 
    }
    if ($zaehlen >2) {
    echo "Es sind zwei Wochentage"; 
    }
    if ($zaehlen >3) {
    echo "Es sind viele Wochentage"; 
    }
    }
    


  • Sag ich doch.

    Und warum reicht dir dafuer kein std::vector oder std::array ?



  • Cardiac schrieb:

    Sag ich doch.

    Und warum reicht dir dafuer kein std::vector oder std::array ?

    wenn du mir sagen könntest wie ich das mit foreach dann mit einem mehrdimensionalen array lösen kann

    übrigens oben hab ich eine Fehlermeldung bekommen..



  • Siralle schrieb:

    übrigens oben hab ich eine Fehlermeldung bekommen..

    Dann hast du vermutlich den include vergessen, oder irgendwas anderes falsch gemacht. Keine Glaskugel => Keine Ahnung.



  • Kann mir jemand sagen wie man das am sinnvollsten in c++ umsetzen kann

    $wochentag = array('montag','dienstag','mittwoch','donnerstag','freitag');
    foreach($wochentag as $tag){
    $zaehlen = substr_count($satz, $tag);
    if ($zaehlen >1) {
    echo "Es ist ein Wochentag"; 
    }
    if ($zaehlen >2) {
    echo "Es sind zwei Wochentage"; 
    }
    if ($zaehlen >3) {
    echo "Es sind viele Wochentage"; 
    }
    


  • #include <iostream>
    #include <string>
    #include <map>
    
    int main()
    {
        std::map<std::string, int> myMap;
    
        myMap.insert(std::make_pair("foo", 1));
        myMap.insert(std::make_pair("bar", 2));
    
        for ( const auto &myPair : myMap ) {
            std::cout << myPair.first << "\n";
        }
    
        return 0;
    }
    

    Template varianten werden dir vermutlich zu kompliziert sein; BOOST_FOREACH und transform_iterator gibts es auch noch (nur um es wenigstens erwaehnt zu haben).



  • Siralle schrieb:

    ich? ich will sowas in C++ machen

    $wochentag = array('montag','dienstag','mittwoch','donnerstag','freitag');
    foreach($wochentag as $tag){
    $zaehlen = substr_count($satz, $tag);
    if ($zaehlen >1) {
    echo "Es ist ein Wochentag"; 
    }
    if ($zaehlen >2) {
    echo "Es sind zwei Wochentage"; 
    }
    if ($zaehlen >3) {
    echo "Es sind viele Wochentage"; 
    }
    }
    
    #include <iostream>
    #include <string>
    
    int substr_count(const std::string& haystack, const std::string& needle) {
      const auto len = needle.size();
      int result=0;
      for(auto n = haystack.find(needle); n!=std::string::npos; n=haystack.find(needle, n+len))
        ++result;
      return result;
    }
    
    void whatever(const std::string& satz) {
      static const char* const wochentag[]={"montag", "dienstag", "mittwoch", "donnerstag", "freitag"};
      for(auto&& tag : wochentag) {
        const auto zaehlen = substr_count(satz, tag);
        if(zaehlen>1) std::cout << "Es ist ein Wochentag\n";
        if(zaehlen>2) std::cout << "Es sind zwei Wochentage\n";
        if(zaehlen>3) std::cout << "Es sind viele Wochentage\n";
      }
    }
    


  • Auch die Aussage, dass es das im C# nicht gibt ist eine unhaltbare Aussage:

    public static void Main()
    	{
    		string[] wochentage = new string[] { "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag" };
    
    		string satz = "Montag ist der erste Tag der Woche. Leider folgt Montag auf das Wochenende (Freitag, Samstag, Sonntag).";
    
    		foreach(string tag in wochentage)
    		{
    			// do the count
    			int zahlen = CountStrings(satz, tag);
    
    			if(zahlen > 2)
    				Console.WriteLine("Es sind viele Wochentage");
    			else if(zahlen > 1)
    				Console.WriteLine("Es sind zwei Wochentage");
    			else if(zahlen > 0)
    				Console.WriteLine("Es ist Wochentag");
    		}
    	}
    
    	private static int CountStrings(string str, string regexStr)
    	{
        	Regex regex = new Regex(regexStr);
        	return regex.Matches(str).Count;
    	}
    


  • hey dankeschön erstmal 🙂



  • Hallo zusammen gibt es in C++ eine Funktion wie explode? Also dass eine Zeichenkette nach Sätzen geschnitten wird und in Arrays mit strings gepackt wird, so dass man eine Nummer von Sätzen hat.
    Ich kenne zwar strtok, aber das funktioniert ja nicht so.





  • Genau die Funktion wirst du wahrscheinlich nicht finden, sollte aber nicht zu schwer sein nachzubauen. Schau doch mal in der Doku:

    http://www.cplusplus.com/reference/string/string/


  • Mod

    Siralle schrieb:

    Hallo zusammen gibt es in C++ eine Funktion wie explode? Also dass eine Zeichenkette nach Sätzen geschnitten wird und in Arrays mit strings gepackt wird, so dass man eine Nummer von Sätzen hat.
    Ich kenne zwar strtok, aber das funktioniert ja nicht so.

    Da gibt's mehrere mögliche Antworten.

    Die Experten-völliger-Overkill-Antwort: Da kann man gewiss einen schicken Einzeiler mit regex_token_iterator formulieren.

    Die Bastlerantwort: Da kann sich etwas mit find und substr basteln.

    Die einfache, faule Antwort: String in einen Stringstream stopfen, dann mit getline teilen.

    Die weiter gedachte Antwort: Der String kommt doch bestimmt irgendwo her. Wahrscheinlich wird er irgendwo aus einer Art Stream gelesen. Da böte es sich doch an, die obige Antwort mit getline direkt auf diesen Stream anzuwenden. Und spart sich den String.


Anmelden zum Antworten