Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. Wenn du keine if-Kaskade willst, kannst du eine einfache Lookup-Tabelle benutzen: string known_commands[] = { "bla", "blubb", "hassenichgesehn" }; const size_t count = sizeof( known_commands ) / sizeof( known_commands[0] ); ... string eingabe = whatever; if( std::find( known_commands, known_commands + count, eingabe ) != known_commands + count ) { // Kategorie "bekannt" } else { // Kategorie "unbekannt" }[/code] Das lässt sich natürlich noch verbessern. Bei einer sehr großen Liste könnte man z.B. die Einträge sortieren und eine binäre Suche verwenden (oder gleich std::set benutzen).
  2. Du hast Recht. Das hatte ich wohl schon wieder verdrängt. Dann so: while(iss >> word) ++len_map[min(word.length(),string::size_type(20))]; [/code] Dazu braucht man dann noch <algorithm>.
  3. Sieht ganz gut aus. Die Prüfung auf '\0' ist überflüssig, weil das nicht passieren kann, wenn du aus cin einliest. Und die Begrenzung auf maximal 20 Zeichen ist natürlich willkürlich, die könntest du umgehen, wenn du statt eines Arrays einen Vector benutzen würdest. Wenn du Maps und Stringstreams benutzen darfst, und den String-Konstruktor für eine bestimmte Anzahl gleicher Zeichen benutzt, geht das sogar noch etwas kürzer: #include <string> #include <map> #include <sstream> #include <iostream> using namespace std; int main() { cout<< "Text = ? " ; string text; getline(cin,text); map<string::size_type, int> len_map; istringstream iss(text); string word; while(iss >> word) ++len_map[word.length()]; for(string::size_type k=1; k<=len_map.rbegin()->first; ++k) cout << k << ' ' << string(len_map[k], '#') << '\n'; }[/code]
  4. Guybrush, er hat doch nach Alternativen gefragt. Dass das nicht geht, hat er schon gemerkt @suedpfaelzer: Du kannst natürlich eine Kaskade von if-Anweisungen benutzen. Je nachdem, was du dann daraus machen willst, kannst du auch eine Lookup-Tabelle oder einen assoziativen Container (in C++ beispielsweise std::map) benutzen.
  5. Bei so einem kurzen Programm ist das IMHO nicht notwendig. Wenn du übrigens mal die Suchfunktion bemühst, solltest du einen fertigen Code in C finden.
  6. Das ist ein ganz normales Präprozessorsymbol, das eben nur bei MSVC-Projekten standardmäßig definiert ist. Es reicht also, wenn du das in den Projekteinstellungen (oder eben im Code, vor der Includedirektive für diesen Header) definierst.
  7. Reichst du möglicherweise in deinem Programm Zeiger herum, die aus nicht mehr existierenden CStrings geholt wurden? So etwas z.B.: LPCTSTR foo() { CString s; return s; // oder return s.GetString(); }[/code] Oder so etwas: [code]LPCTSTR x = CString( bar ).GetString(); Du musst darauf achten, dass du keine Zeiger über die Lebenszeit der zugehörigen CStrings hinaus verwendest. Und sehe ich das richtig, dass die Methoden der Klasse CLSDatabase mit Zeigern auf CStrings arbeiten? Ist das eine Eigenentwicklung? Allgemein scheinst du ziemlich leichtfertig mit Zeigern umzugehen. Da kann natürlich viel schief gehen, und es ist auch oft so, dass sich Fehler nicht immer oder nur in besonderen Situation bemerkbar machen. Dass dein Code also bis auf diese eine Format-Anweisung funktionert, bedeutet nicht, dass der übrige Code fehlerfrei ist. Meine Vermutung ist nach wie vor, dass du dir irgendwo in deinem Programm die Speicherverwaltung zerlegst.
  8. Warum ist der Rückgabetyp BSTR? Ist dir klar, dass du mit AllocSysString ein Speicherleck hast? Rohe BSTRs erfordern explizites Speichermanagement. "LPCTSTR bstrTableName" ist auch nicht so toll. Wenn du schon UN benutzt, sollten die Namen auch zu den Typen konsistent sein. Wirfst du auch noch an anderer Stelle im Code so mit BSTRs um dich? Das könnte deine Heapprobleme erklären.
  9. Das ist auch Unsinn. Das funktioniert, sowohl mit GetString als auch ohne. Wie sieht denn GetVIPSQLTableName aus?
  10. Ja und warum sagst du dann nicht endlich mal, welches Feld das ist? Warum muss ich dir jedes Fitzelchen Information aus der Nase ziehen? Warum muss ich meine Fragen andauernd wiederholen? Allmählich verliere ich die Lust, dir zu helfen.
  11. Ich habe mich bezüglich der Bedeutung von f und n geirrt: Du brauchst also keine Funktion f, sondern ein Array: float f[] = { -125.0f, 65.0f, -13.0f, 1.0f }; Und statt der runden Klammern benutzt du einfach eckige.
  12. a1 und a0 sind nicht die Nullstellen: Auch das steht da: Auf jeden Fall musst du in deinem Code a1 und a0 initialisieren, sonst kann das nicht funktionieren.
  13. Nein, das ist Unsinn. Mit Texten kannst du nicht rechnen. Und versuch erst gar nicht, den Benutzer die Funktion eingeben zu lassen. Dazu brauchst du einen Parser, und davon bist du sehr, sehr weit entfernt. Deine Funktion f muss in etwa so aussehen: float f(float x) { return x*x*x-13*x*x+65*x-125; }[/code] Die Funktion muss vor der main-Funktion stehen. ^ ist in C und C++ kein Potenzoperator, sondern steht für bitweise-exklusiv-oder. a1 und a0 musst du übrigens auch initialisieren, ich vermute, mit den Koeffizienten des Polynoms. Ich glaube außerdem, dass das nur ein Teil des Algorithmus ist. Ehrlich gesagt, dir fehlen die elementarsten Grundlagen, um diese Aufgabe zu lösen. Du solltest dir für den Anfang eine einfachere Aufgabe suchen. Man könnte dir jetzt in vielen einzelnen Schritten erklären, was du tun musst, aber das wäre in etwa so, als wollte man jemandem, der nicht weiß, an welchem Ende man einen Hammer anfasst, oder was ein Ziegelstein ist, erklären, wie man ein Haus baut.
  14. Klotzkopp

    VB Funktion

    foo = "2cf" bar = CInt( "&H" + foo ) MsgBox bar[/code] Für Werte > 16 Bit musst du CLng statt CInt nehmen.
  15. Klotzkopp

    VB Funktion

    Setz "&H" vor den Hex-String und wandle es mit CInt um.
  16. Theoretisch manchmal, praktisch nicht. Dazu darfst du gerne in die Dokumentation des Builders schauen oder auf Hilfe von jemandem warten, der sich mit dem Builder besser auskennt als ich. So viele Linkereinstellungen kann es aber doch nicht geben, oder? Es kann übrigens auch sein, dass eine Direktive zum Einbinden der Lib irgendwo im Code steht. Such einfach mal im Code nach dem Dateinamen.
  17. Ohne die Komponente zu kennen: Könntest du genau das nicht einfach durch drei einzelne Objekte erreichen?
  18. ...ist keine ausreichende Fehlerbeschreibung. Ich sagte, du brauchst eine Funktion f. Irgendwie muss dein Programm doch auch wissen, zu welcher Funktion es die Nullstellen ermitteln soll, oder? Außerdem musst du n (die Iterationstiefe) mit irgendeinem Wert vorbelegen.
  19. Und welches ist das? Gut, ich habe danach nicht ausdrücklich gefragt. Aber ist es dir nicht in den Sinn gekommen, dass das ziemlich interessant wäre?
  20. Stimmt die Stelle, an der abgeschnitten wird, mit einem bestimmten Feld des Format-Aufrufs überein?
  21. Dann bringt es auch nichts, an den Linkereinstellungen zu drehen. Wenn das Erstellen dieser Lib nicht Bestandteil des Projekts selbst ist, dann hat das Projekt eine Abhängigkeit, die in den Sicherungen, die du bekommen hast, nicht drin ist. Da kannst du gar nichts machen, außer diese Lib zu beschaffen. Soweit ich weiß, ist das keine Standard-Windows-Bibliothek. Es muss also eine Eigenentwicklung oder von einem Drittanbieter sein. Versuch doch mal, das Einbinden dieser Lib in den Linkereinstellungen abzuschalten. Das sollte zur Folge haben, dass der Linker sich über alle fehlenden Funktionen beklagt. Darüber kann man die Bibliothek möglicherweise besser identifizieren.
  22. Wie "ergänzt" und "kürzt" du denn?
  23. Das wäre eine Möglichkeit. Eine andere wäre, dass die Suchpfade des Linkers falsch eingestellt sind. Hast du denn eine solche Datei auf dem Rechner?
  24. Wo wurde denn dargestellt? Ich will nur sicherstellen, dass es nicht die Darstellung ist, die eine Begrenzung hat. Hast du dir die Länge mit GetLength ausgeben lassen? Und welche Länge ist es nun?
  25. Nicht, solange du das nur mit CString::Format machst (und nicht etwa mit sprintf). Allerdings darfst du das CString-Objekt, dessen Format-Methode du aufrufst, nicht als Parameter im selben Aufruf benutzen. Möchtest du eigentlich meine Fragen nicht beantworten?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...