brauch hilfe zu einem program



  • Hallo CStoll,

    ok einmal einlesen, verstanden.
    Kannst du mir vielleicht sagen was du mit map<string,int> meinst oder ein beispiel zeigen.

    Danke
    semid



  • ...oder du nimmst irgendeinen keylogger der alles in eine datei schreibt und wertest die am schluss aus.



  • Zum Thema map<> findest du im Magazin einen Artikel (STL Teil 1). Dort kannst du zu jeder interessanten Taste den Namen (string) und die Anzahl der Tastendrücke (int) eintragen. Beim Programmstart mußt du aus der seltsamen Dateistruktur dort oben die Taste/Wert-Paare auslesen und in deine Map einfügen, im laufenden Programm erhöhst du die Werte und am Ende schreibst du alles wieder zurück:

    map<string,int> tasten;
    
    //Start:
    ifstream file("tasten.txt");
    while(file)
    {
      string name;int wert;
      file.get();             // " auslesen
      getline(file,name,'/'); // Name lesen (überliest das Endezeichen /)
      file>>wert;
      if(file) tasten.insert(make_pair(name,wert));
    }
    file.close();
    
    //Tastendruck auswerten
    string name = hole_taste();//gibt den Namen der aktuellen Taste als String zurück
    tasten[name]++;//erhöhe Zähler
    
    //Programmende
    ofstream file("tasten.txt");
    for(map<string,int>::iterator p=tasten.begin();p!=tasten.end();++p)
      file<<'"'<<p->first<<'/'<<p->second;
    file<<'"';
    file.close();
    


  • hallo ich bin es wieder...

    - Ich hab auf meinem Form ein paar Buttons erstellt und will als Aktion nur eine Methode aufrufen. In der Methode will ich aber wissen von welchem Button die aufgerufen wurde.
    Kann mir jemand sagen ob das irgendwie möglich ist und wie?

    - Kann ich irgendwie zwei String Variablen (keine char) vergleichen.

    Also:

    string f1,f2;
    
    strcpy(f1, "das ist ein Test");
    strcpy(f2, "das ist ein Test");
    //=> gleich
    
    strcpy(f1, "das ist ein Test");
    strcpy(f2, "das ist kein Test");
    //=>ungleich
    

    Danke schön



  • semid schrieb:

    string f1,f2;
    
    strcpy(f1, "das ist ein Test");
    strcpy(f2, "das ist ein Test");
    //=> gleich
    
    strcpy(f1, "das ist ein Test");
    strcpy(f2, "das ist kein Test");
    //=>ungleich
    

    *lol*

    Ein Beispiel:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main( )
    {
        string one = "Hello!", two;
    
        cout << "My string is \"" << one << "\". Enter one: " << endl;
        cin >> two;
    
        cout << "\"" << one;
        if( one.compare( two ) == 0 ) {
    
            cout << "\" == \"";
    
        } else {
    
            cout << "\" != \"";
        }
        cout << two << "\"." << endl;
    }
    

    Greetz, Swordfish



  • Hi, eigentlich muss das gehen aber irgendwie läufs nicht.
    DAs Problem ist das er die Daten in der logfile nicht überschreibt sondern die einzelnen Tasten die != 0 sind hinzufügt. Und somit muss ich wenn ich die log-Datei hochlade die Summe der einzellnen Tasten haben:
    [code]
    // Die log-Datei wird hochgeladen und die Taste mit dem dazuhörigem Wert
    // wird in die map "Taste" geschrieben
    string name, old_name, new_name;
    int wert, old_wert, cmp;
    ifstream logfile("log.txt");
    while(logfile)
    {
    logfile.get(); // " auslesen
    getline(logfile,name,'/'); // Name lesen (überliest das Endezeichen /)
    logfile>>wert;
    new_name = name; //Welche Taste grade ausgelesen wird
    if(logfile)
    {
    //Wenn die Taste die grade ausgelesen wurde nicht die Taste ist die
    //letztes mal ausgelesen wurde. => Gleiche Tasten werden Summiert
    //und die Summe wird in die Map gespeichert

    if( new_name.compare( old_name ) != 0 )
    {
    tasten.insert(make_pair(old_name,old_wert));
    old_wert = 0;
    ListBox1->Items->Add(tasten[old_name]);
    }
    }
    old_name = name; //Welche Taste grade ausgelesen wurde
    old_wert+=wert;
    }
    logfile.close();
    [code]

    Bei dem Punkt "if( new_name.compare( old_name ) != 0 ) " geht er trotzdem in die if-Anweisung auch wenn new_name und old_name gleich sind.

    HAt jemand nen Tip...

    Danke schön



  • Hatte noch was vergessen...

    Hab jetzt 2 Forms erstellt, und muss im 2tem Form die 1te unit.h datei includieren um mit der Klasse zuarbeiten.
    Wenn ich das aber mache bekomme ich einen Fehler bei der deklaration von der
    map Variable:

    class TKeyHookForm : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TButton *Button1;
            TListBox *ListBox1;
            TPerformanceGraph *PerformanceGraph1;
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall FormDestroy(TObject *Sender);
            void __fastcall SaveData(TObject *Sender, TCloseAction &Action);
            void __fastcall Button1Click(TObject *Sender);
      private:	// Anwender-Deklarationen
        int Graph_var;
        MESSAGE void __fastcall KeyHook(TMessage &Message);
        BEGIN_MESSAGE_MAP
          MESSAGE_HANDLER(WM_KEYHOOK, TMessage, KeyHook);
        END_MESSAGE_MAP(TForm);
      public:      	// Anwender-Deklarationen
            __fastcall TKeyHookForm(TComponent* Owner);
             void addKey(char[]);
             map<string,int>tasten;      //Fehler
             int GetGraph_var(char[]);
    
    };
    

    [C++ Fehler] Unit1.h(35): E2303 Typname erwartet
    [C++ Fehler] Unit1.h(35): E2139 In Deklaration fehlt ;

    Hat jemand ne Idee woran das liegen könnte...

    Danke schön
    Semid



  • #include <map> vergessen?

    #include <stirng> vergessen?

    using namespace std vergessen?



  • #include <map> vergessen?
    #include <stirng> vergessen?

    ne hatte ich schon drin...
    was meinst du mit:
    using namespace std vergessen? 🙄

    Gruß
    semid



  • Hallo

    Es ist gemeint ob du die Anweisung

    using namespace std;
    

    nach den Includes der Headerdatei vergessen hast.

    Allerdings solltest du lieber immer std:: vor jedem Typ string, vector, map usw. schreiben.

    bis bald
    akari


Anmelden zum Antworten