Fragen zur Machbarkeit in C/C++

Hallo Duda,

ich antworte dir mal ausnahmsweise nur mit Code. Ich weiß auch nicht ganz genau worauf du hinaus willst, hoffe aber das deine Frage irgendwie mit dem Code beantwortet werden kann. Falls nicht, nachfragen.
C++:
#include <iostream>
#include <string>

int main(int argc, char **argv)
{
    char arr[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    unsigned int index = 10;

    std::string str = "ABC2345_";
    std::cout << str << std::endl;
    str.append("F");
    std::cout << str << std::endl;
    str.append("XYZ");
    std::cout << str << std::endl;
    str.push_back('F');
    std::cout << str << std::endl;
    str.push_back(arr[index]);
    std::cout << str << std::endl;
    std::string str2 = "Moin Duda!";
    size_t startIndex = 0;
    size_t laenge = str2.length();
    str.replace(startIndex, laenge, str2);
    std::cout << str << std::endl;
    str.pop_back();
    std::cout << str << std::endl;
    str.erase(laenge);
    std::cout << str << std::endl;
    std::string moin = "moin ";
    str.insert(5, moin);
    std::cout << str << std::endl;

    for(size_t i = 0; (i < str.length()) && (i < 16); i++) {
        str.replace (i,  1,  1, arr[i]);
    }
   
    std::cout << str << std::endl;

    getchar();
    return 0;
}

Grüße,
Jennesta
 
Hallo Jennesta,
danke für Deine Mühe mit mir. Besondern Dank für den Code. Muß ich mir in aller Ruhe reinziehen, wie es so schön heißt. Werde danach noch dazu Stellung nehmen bzw. noch schreiben wie ich damit klarkomme. Wollte im Moment aber vorher noch auf das letzte Schreiben von ComFeek antworten. Also habe bitte etwas Geduld mit mir. Danach bin ich dann wieder an dieser Stelle. (wenn ich dann noch schreiben kann, ich meine nach dem Roman für ComFreek) :)

Danke bis dann,

Grüsse

Duda
 
Hallo ComFreek,
ich versuche es mal mit einer groben Übersicht, zu dem, was ich vorhabe, wozu ich immerwieder auf Euere Hilfe zurückgreife, indem ich Fragen stelle, die für Euch keine sind.
Der 1. Programmteil besteht besteht auf Seite1 im Fenster "Form1", ich habe Form1 mit 5 Seite(tabPage1 bis 5) angelegt. Also auf Seite1 sind 4 Eingabefelder für den 1., 2., 3. und 4.String angelegt. Nach jedem String kommt eine Dialogauswahl wie "Cancel" oder "Ok", nach der Eingabe über die Tastatur, sowie dem Anklicken, folgt ein Ereignis, entweder verworfen
und es muß neu eingegeben werden(Schreibfehler oder so) oder es geht weiter zum Ereignis, wonach die zwischenden Geschweiften einzusetzende Anweisung im Programmverlauf abgearbeitet wird. Dies Abfrage habe ich, damit ich den jeweiligen String nochmal ansehen kann, ob ich alles richtig eingetippt habe, bevor ich Ok anklicke. Denn danach geht es in den jeweils folgenden Anweisungen zu diversen Berechnungen. Soweit ist alles klar und es bedarf keiner weiteren Frage. Wenn nun nacheinander alle 4 Strings nach dieser Methode eingegeben wurden, dann wird in den Anweisungen folgendes abgearbeitet:
Der 1. String besteht aus 17 Stellen(11 Buchstaben und 6 Zahlen), hierfür wird ein neuer String erzeugt, welcher nur noch die 6 Zahlen enthält.
Es ist damit der 1. Neustring im Programm und wird später gebraucht.
Der 2. String besteht aus 8 Stellen und enthällt 8 Zahlen, aus welchen eine Zahl errechnet werden soll. Dies ist, Dank Cromon, automatisiert.
Diese Zahl wird dann, Dank Deiner Hilfe mit Deiner "String-Tabelle" in einen Alphanumeric umgewandelt. welches dann die 1. Prüfziffer(Checksum) für den 2. String(welcher ein Code ist) gebildet hat.. Dies ist das erste Ergebnis, was ich erzielen möchte. Das Selbe passiert mit dem 3. und 4. String, wobei hierfür aber jeweils ein 3. und 4. Neustring gebildet wird, denn aus dem 1. NeuString und dem 3. String wird der 3.Neustring, welcher der Berechnung laut Cromon zugeführt wird und anschliessend noch mit Hilfe Deiner "String-Tabelle" wird das Ergebnis zu der Prüfziffer
für den 3. String(welcher ein Code ist). Also damit habe das zweite Ergibnis erzielt. Beim 4. String ist es auch so, aus 1. NeuString und 4. String wird der 4. Neustring gebildet und kommt zur Berechnung mit anschliessender Umwandelung zu einer Prüfziffer, damit ist das dritte Ergebnis erzielt und der 1. Programmteil erledigt. Laut meiner Codierung, welche in Deine "String-Tabelle" eingeflossen ist(bei mir "Alphanumerics") und der automatischen Berechnung laut Cromon, erscheint bis hierhin alles klar.
Doch nun zum weiterem Verlauf des Programmes. Es geht auf die die Seite2 von "Form1". Hier fließt dann später auch der 1. NeuString mit den 6 Zahlen wieder mit ein, welche ja aus dem 1. String stammen.
Aber nun müssen anstelle des 2., 3. und 4. String, total neue Strings gebildet werden. Dies geschiet bei dem 2. TotalNeuString durch 8 Groupboxen mit Buttons, wovon immer nur ein Button zur Auswahl kommt, was einer Option gleich kommt. Diese Optionen habe alle einen anderen Wert, wobei es aber im Rahmen der einstelligen Hexzahlen bleibt, wo ja Dez oder Hex gleich sind. Hier habe ich nach der Buttonauswahl das Cancel oder Ok eingerichtet, damit ich nochmal alles auf Richtigkeit überprüfen kann, bevor ich Ok anklicke. In dem anschliessendem Ereignis muß zuerst der 2. TotalNeustring angelegt werden und anschliessend mit den Werten der ausgewählten Buttons/Optionen gefüllt werden, hier sind es nur einstellige Zahlen von 1 bis 7(als Beispiel) und es ist egal ob hex oder dez, wobei es eigentlich schon hex sein sollten, aber scheint nicht ganz so wichtig.
Aber wie kriege ich die Werte in den String, denn es sind zur Zeit ja Variablen. Hier liegt zur Zeit mein Knackpunkt, ich würde aus den Variablen laute kleine Strings machen und zusammenfügen. Aber es sollte es was Anderes geben, dann würde ich es vielleicht anderst machen.
Wenn denn alles klappt, dann ist der 2. TotalNeuString fertig und damit auch ein erster Code, der berechnet werden kann und damit auch eine Prüfziffer laut der "String-Tabelle" bekommt.
Nun geht es auf die Seite3 des "Form1", wo dann mit Hilfe von 16 Checkboxen mit jeweils 4 Kontrollkästchen eine Auswahl stattfindet. Auch bei der einen oder anderen Checkbox gibt es die Möglichkeit, daß nichts ausgewählt wurde, was zu dem Wert 0 führt, was auch so gewollt ist.
Aber bei irgendwelchen Auswahlen ergeben sich nur die Werte als Zahlen
von 1 bis 15, welche aus 1, 2, 4, 8 gebildet werden. Aber nochmal zurück zu 0 bis 15, dies sind dann auch die Zahlen, aus denen die HexZeichen für den neu zu bildenden 3. TotalNeuString bestehen sollen. Also ich habe auf der Seite3 die Auswahlen getroffen, ich habe auch hier Cancel und Ok eingerichtet. Nach dem Klick auf Ok findet das Ereignis statt. In der Anweisung wird zuerst der 3. TotalNeuString angelegt, die Zahlen 0-15 in HexZeichen umgewandelt und nun müßten diese HexZeichen irgendwie in den 3. TotalNeuString hinein. Also auch hier bin ich in der gleichen Situation wie schon weiter vor.
Ich möchte auch gleich zur Seite4 von "Form1" weitergehen, auch wenn es hier genauso ist wie auf Seite3, nur es sind nur 10 Checkboxen mit 4 Kontrollkästchen, welche ein Häkchen zum Anwählen bekommen. Auch hier Cancel und Ok eingerichtet und nach OK, in der Anweisung den 4. TotalNeuString bilden und die entsprechenden Werte einfügen.
Ja um es nicht zu vergessen, natürlich folgt, für alle TotalNeuStrings die Berechnung der Prüfziffern, denn ohne diese sind die neu erstellten Codes wertlos.
Auf der Seite5 möchte ich dann den letzten Programmteil, worin der 1. String, der 2. String, der 3. und 4. String mit den entsprechenden Prüfziffern ausgedruckt wird. Weiterhin sollen der 2. TotalNeuString, der 3. TotalNeuString und der 4. TotalNeuString mit den Entsprechenden Prüfziffern ausgedruckt werden. Vielleicht noch Datum etc..

So nu mache ich mal Schluß, wenn auch noch einiges offen ist, aber bevor ich nur noch auf der Stelle trete, da warte ich lieber auf weiter Fragen von Euch.

Viele Grüsse

Duda
 
Hallo Duda,

sehr ausführlich! Ich frage mich, was für einen Anwendungsfall dein Programm bedient. Aber du hast ja schon einmal geschrieben, dass das geheim ist.

Aber wie kriege ich die Werte in den String, denn es sind zur Zeit ja Variablen.
Diese Frage verstehe ich nicht. Du kennst doch insert(), replace() und ähnliche Funktionen der String-Objekte. In deinem Programm ist jeder Wert, mit dem du arbeitest, faktisch eine Variable.
Beschreibe das Problem bitte genauer, ich kann mir unter der Frage, wie man "die Werte in den String" bekommt nichts vorstellen.

nun müßten diese HexZeichen irgendwie in den 3. TotalNeuString hinein. Also auch hier bin ich in der gleichen Situation wie schon weiter vor.
Was heißt "hineinmüssen"? Wo liegt dein genaues Problem?
  • Hast du Zugriff auf die Variable mit den Hexzeichen?
  • Hast du Zugriff auf die Variable TotalNeuString?
Wenn du beides bejahst, dann steht nichts mehr im Wege, beliebige Operationen mit den beiden Variablen durchzuführen.

Mehr kann ich dazu wegen den oben genannten Fragen leider nicht äußern.
 
Hi ComFreek,
ich würde Dir und auch den anderen, welche mir bis jetzt erfolgreich zur Seite gestanden haben kein Geheimnis daraus machen, es ist nur so, ich möchte es ungern im Forum breittreten, ich hoffe Du verstehst was ich meine. Es ist wirklich nur für einen kleinen Kreis von Enthusiasten gedacht, denen ich, wenn mein Programm läuft, damit eine große Hilfe sein kann.
Ich weiss, das es schon ähnliche Programme gibt, aber die Leute, welche
sich ein derartiges Programm auf irgendwelche Wege beschafft haben, es mag dahingestellt sein, ob selbst programmiert oder gekauft, es ist mir auch egal, aber wenn solche Leute damit Dienstleistung anbieten. Was mir auch egal ist, aber nicht mit mir, deswegen habe ich in mühevoller Kleinarbeit einen ganzen Wäschekorb voll Papier produziert, bis ich die Formeln zur Berechnung der Prüfziffern herausgefunden hatte. Also nun mache ich mir selbst ein Programm und wenn es läuft, dann ist es für mich und ein paar gute Bekannte ein Grund zur Freude. Wenn Du möchtest, dann schreibe ich Dir mehr per PM oder so.
Ich habe nun auch nach und nach den Wink mit dem Zaunpfahl begriffen,
damit meine ich die versteckte Andeutung, daß ja im Grund für die Befüllung der Strings nichts im Wege steht, ausser ich selbst, weil ich etwas schwerfällig im Begreifen von/bei C++ bin. Also ich versuche es mal weiter und erst wenn ich nicht weiterkomme, dann werde ich wieder weitere Fragen stellen. Ach ja, danke für den Fragekatalog, habe alles mit "ja" beantwortet. Nun geht es auch weiter.

Viele Grüsse

Duda
 
Hallo Jennesta,
auch Deine Beispielcodezeilen habe ich Handschriftlich vom Display auf Papier übertragen, damit ich mich besser damit beschäftigen kann.
Ich kann Dir nur nochmal danken, denn hier kriege ich aufgezeigt, was alles möglich ist. Quasi vom Erfahrenen als Anleitung für den Unerfahrenen.
Nun kann ich ohne viele Worte Deinerseits sehen, was Du mit mir mit dem "char arr[16] = {'0' .....'F'}; sagen willst. So kann man über [0] bis [15] auf 0 bis F zugreifen bzw, aus den Platzhalterzahlen des Arrays die HexZeichen abrufen. Ich weiss, meine Formulierungen sind nicht die Fachsprache eines erfahrenen Programmierers, abe ich Denke Du verstehst was ich meine. Also alles ok, auch einem angelegtem String können die Platzhalter"[ ]" mit der entsprechenden Zahl als Inhalt zugewiesen werden. Auch als Kette mit jeweils einem + dazwischen, dadurch sollte sich so ein String füllen lassen. :)
Ähnliches mache ich auch mit dem Beispielcode von ComFreek, da ist es nur ein normaler const String,
den ich als Tabelle benutze, welcher die von mir codierten Zahlen 0-9 und A bis Z enthält. Welche dann über die Positionsnummern abgerufen werden, Also es ist kein Problem nochmal so einen const String für das Abrufen der Zeichen 0-9 und A-F einzurichten, was im Prinzip Deiner Darstellung gleichkommt und auch schon so in Angriff genommen ist. Aber trotzdem finde Deinen Code nicht uninteressant, auch wie Du mir aufzeigst, was mit Strings alles so gemacht werden kann, das finde ich super. Wenn man nur die Bücher zur Hand hat, dann fehlt doch etwas Beispielcode aus der Praxis. Du zeigst mir wie "str.append( "F"); funktioniert den auch hier werden Strings hinten angefügt, wobei es nur eine Kopie von dem Angefügten ist und der Orginal-String unverändert bleibt. Dann das "str.push_back('F'); damit ist sicher auch ein Zugriff/Rückgabe von Buchstaben F gemeint. Auch das "str.push_back(arr[index]); ist ein Art über den Wert 10, so wie es oben bei "unsigned int index = 10;" zugewiesen wurde. Demnach müßte es für den Buchstaben A sein. Was danach kommt kann ich nur so ebend nachvollziehen, aber es geht um das Anlegen von std::string str2 = "Moin Duda!"; und um darum, womit der Index startet und um Manipulation von
str mit "replace" an bestimmter Position im String wobei ich mit "pop_back" nichts anzufangen weiss(warte noch auf Bücher für Fortgeschrittene). Dafür ist mir dann "erase" und "insert" wiede aus meinen Anfängerbücher bekannt. Ja auch das immer zwischen den Zeilen auftauchende "std::cout<<str<< std::endl; ist mir bekannt, welches sicher immer den "str" im jeweiligen Zustand auf der Konsole anzeigt.
Mit der Schleife "for", der folgenden Anweisung da kann ich mich noch nicht reindenken. Bei "getchar( );" ist es wohl so, daß das Programm anhält und auf eine Zeicheneingabe wartet(wobei hier auch die Enter-Taste genügt. wenn ich ehrlich bin, teilweise noch böhmische Dörfer für mich, aber ich werde mich einlesen oder fragen. Aber erstmal halte ich ab und zu das Blatt, auf dem Dein Code geschrieben ist, vor meine Augen und versuche zu verstehen, was mir noch unbekannt vorkommt.
So ich mache mal mit dieser Zeile ein Ende mit meiner Schreiberei.
Nochmals danke für Deine Mühe, indem Du mir noch einen anderen Weg aufgezeigt hast.

Viele Grüsse

Duda
 
Zuletzt bearbeitet:
Hallo Jennesta,

in den letzten Sätzen meines vorangegangenen Schreiben habe ich geschrieben: "Danke, daß Du mir noch einen anderen Weg aufgezeigt hast.
Ich muß mich da wohl korregieren, denn es sind nicht ein Anderer, sondern viele andere Wege. Ich habe soweit es ging gegoogelt und durch Deinen Code hatte ich ja die entsprechenden Schlagworte, weil push_back und pop_back, damit konnte ich, als ich Deinen Code gelesen habe, natürlich noch nichts anfangen. Doch nun weiss ich das es was mit Stacks sowie mit Vectoren was zu tun hat und natürlich mit den Strings. Mit push_back kann man ein einzelnes Zeichen hinten anhängen und mit pop_back wieder entfernen. Nun kann ich auch nach und nach Deinen Code interpretieren.
Da für mich bis einschließlich "string str2 = "Moin Duda!"" alles klar war.
Aber mir das "size_t startIndex = 0;" und "size_t laenge = str2.length ( );"
doch zu denken gab, wobei es eigentlich auch hätte klar sein müssen, denn in der fogenden Zeile werden bei "str.replace(startIndex, laenge, str2);" diese Bezeichnungen als Parameter verwendet. Wobei ich annehme, da "startIndex = 0" und "laenge = Str2.length" sein soll, daß da "str" durch "replace" ziemlich verändert wird. Dann wird durch pop-back" noch das letzte Zeichen entfernt. "erase" nimmt auch noch die "laenge". Was da noch in "str" verblieben ist, das ist mir schleierhaft. Aber ich nnehme mal an, daß es das Moin ist. Ich sehe den neue "string moin = "moin"; welcher dann durch "str.insert(5, moin);" nach der Position 5, als moin eingefügt wird. das heißt für mich: "Dem noch verbliebenem Textteil vom "string str" wurde durch "insert" der "string moin" angehängt." Es ergibt:"Moin moin"
Mit dem "for" muß ich mich noch auseinandersetzen. Ich glaube einiges zu erkennen, was da gemeint ist, aber bin mir nicht sicher. Auch in der darauf folgende Anweisung meine ich erkennen zu können, daß in den Klammern das i die 0 darstellt. Also soll nach der Position 0 was ersetzt werden. Ich denke mal, die erste 1 heißt nur ein Zeichen und die zweite 1 heißt die 1 aus dem array, was wiederum die 0 ist. So nun mache ich, bis mir noch was dazu einfällt,mal wieder Schluß. Um das "for"aufzubröseln brauche ich sicherlich erklärende Worte. Bis dahin,

Viele Grüsse

Duda
 
Hallo,
soweit ich das jetzt beim schnellen drüber lesen gesehen habe, ja so war es gedacht ;). Der Code ist soweit komplett, also falls noch nicht getan, einfach mit VS2010 ein Konsolenprogramm erstellen, Code rein kopieren und ausführen. Durch die Ausgaben siehst du ja direkt was passiert.

Zu den Funktionen, das waren nur einige wenige. Die wo ich aus deinen Beiträgen herausgelesen habe: die könntest du brauchen. Hier ist eine ausführlichere Auflistung der Funktionen http://www.cplusplus.com/reference/string/string/?kw=string
Den Link bzw die Seite solltest du unbedingt mal angucken und als Referenz nutzen. Ich meine so eine ähnliche Seite gab es auch mal auf Deutsch, kann sie aber nicht mehr finden. Vielleicht können da andere helfen.

Grüße,
Jennesta
 
Hallo Jennesta,

danke für Dein Feedback und dem Link. Ja nach und nach finde ich auch mehr Websites, welche sehr aufschlußreich sind. Man muß nur wissen wo
nach man suchen will, ich meine, wenn man erstmal ein paar gute Suchworte hat, dann kommen auch die guten Seiten. Es gibt auch genug in deutscher Sprache, so ist es einfacher für mich, denn es nervt mich schon, wenn ich englische Texte lese und dabei wesentlich langsamer bin, als wenn ich was in der Muttersprache des Vaterlandes lese. ;-)
Ich hätte aber noch eine Frage an Dich oder einem anderem Mitglied, welches sich mit "Visual C++ 2010 Express" oder mit "Visual Studio 2010"
auskennen, noch besser wäre wenn jemand sich mit Beiden auskennen würde. Meine Frage bezieht sich dabei aber mehr auf C++/CLI. Denn nach wie vor bin ich verunsichert und würde das CLI gern aussen vorlassen,
bzw. umgehen, denn ich meine gelesen zu haben, daß es bei "Visual Studio 2010 Professionell" nicht unbedingt notwendig ist, weil hier in klassisch C++ programmiert bzw. die Anweisungen werden in C++ eingefügt. Oder ist damit nur das Programmieren auf der Konsole gemeint. Ich weiss, Du hattest schonmal auf Qt verwiesen, aber nachdem ich schon so vieles von "Visual ....." kenne und mir in Qt alles fremd ist, da möchte ich bei Visuall ....." bleiben, aber wenn nötig auch zu "Visual Studio" wechseln. Ist mal jemand so nett und überprüft, ob ich da was Unzutreffendes rausgelesen habe in dem Link, in meinem Beitrag 89 auf Seite 5.

Viele Grüsse

Duda
 
Zuletzt bearbeitet:
Hi,

Beitrag 89 ist von Comfreek, vermutlich meinst du 90?

Das Mischen von C++ und C++/CLI ist in VS Express und VS Profesional genau gleich umständlich,
"einfach so" reinen C++-Code in die vorgefertigten Teile einfügen geht in keinem Fall.
 
Zurück