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"); //=>ungleichDanke 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 gespeichertif( 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