Probleme
-
Hallo,
ich bin zwar kein C++ Neuling, aber ich habe folgendes Problem:
AnsiString eingabe = edteingabe->Text;
for (int i=0;i<eingabe.Length();++i)
{
eingabe[i]+=2;
}
edtausgabe->Text = eingabe;Dieser Quellcode funktioniert nicht. Beim Ausführen kommt ständig eine Fehlermeldung und ich weiß nicht warum? Könnt ihr mir bitte hlfen?
-
Bei AnsiStrings fängt die Indexierung bei 1 an.
-
Hallo,
beim AnsiString beginnt die Indexnumerierung mit 1.
Also so ist es richtig:for(int i = 1; i <= eingabe.Length(); ++i)Gruß Peter
-
Danke für den Tipp. Jetzt funktioniert es.
Allerdings habe ich jetzt ein weiteres Problem:
den letzten Eingabewert vernachlässigt er, also wenn da steht aaaa , dann macht er daraus nicht etwa ccc , sondern cca .
Warum ist das so?
-
Ich bin noch weiter dabei. Jetzt habe ich noch ein Problem:
int zahlen = cbxzahlen->Items;
AnsiString eingabe = edteingabe->Text;
for (int i=1;i<eingabe.Length();i++)
{
eingabe[i]+=2;
}
edtausgabe->Text = eingabe;Bei der 1. zeile kommt beim debuggen immer folgender Befehl:
[C++ Error] Unit1.cpp(26): E2034 Cannot convert 'TStrings * const' to 'int'Was kann ich dagegen tun?
-
int zahlen = cbxzahlen->ItemIndex;
AnsiString eingabe = edteingabe->Text;
for (int i=1;i<eingabe.Length();i++)
{
if (eingabe[i]='z')
{
eingabe[i]='a'+zahlen+1;
}
else
{
eingabe[i]+=zahlen+1;
}
}
edtausgabe->Text = eingabe;Mein Problem ist jetzt folgendes:
Wenn der Buchstabe z eingegben wird, soll wieder von vorne angefangen werden, also bei Zahlen=2 wird aus dem z in b. Das funktioniert auch, nur die anderen Buchsatben verändern sich nicht mehr entsprechend. Es scheint so als werde eingabe[i]+=zahlen+1; übergangen???
Und das Problem, weshalb das letzte Zeichen nicht verschlüsselt wird, besteht imemr noch.
BITTE HELFT!!!
-
mad21 schrieb:
Und das Problem, weshalb das letzte Zeichen nicht verschlüsselt wird, besteht imemr noch.
wenn du Peter24 Beitrag richtig gelesen hättest hättest du das Problem nicht mehr
noch ein Tipp: ein aussagekräftigerer Titel und Synthax-Highlighting würden sehr zu Lesbarkeit beitragen
-
Hallo,
vielen Dank für die bisherige Hilfe. Wie bereits schon geschildert habe ich zwar ein paar C++ - Erfahrungen, aber ich kenne mich NICHT so gut aus! Daher habe ich noch ein weiteres Problem. Zur besseren Übersicht habe ich den Code über den entsprechenden Befehl eingegeben, hoffe ich zumindestens:
int zahlen = cbxzahlen->ItemIndex; AnsiString eingabe = edteingabe->Text; for (int i=1;i<=eingabe.Length();++i) { if (eingabe[i]='z') { eingabe[i]='a'+zahlen; } else { eingabe[i]+=zahlen+1; } } edtausgabe->Text = eingabe;Mein Problem ist die i-Schleife: Das Verschlüsseln der Buchstaben soll an Hand der Caesar-Chriffren-Verschlüssellung erfolgen, d.h. ist z.B. der Verschlüsselungsvekter = 2, sollen alle Buchstaben um 2 Stellen nach rechts im Alphabet verschoben werden. So wird z.B. aus dem D ein G. Jetzt möchte ich keine Sonderzeichen benutzen und will, dass nach dem Z wieder von vorne angefangen wird. So wird im Beispiel aus dem Y ein A und aus dem Z ein B. Leider funktioniert das nicht. Das Programm behandelt die Buchstaben so, als wären sie alle ein Z.
Ich bitte um eure Hilfe! Danke!
-
Dein Fehler liegt in Zeile 5, Stichwort Zuweisung und Vergleich.
-
Danke, jetzt habe ich es.
Wenn Leerzeichen eingegeben werden, sollen diese auch ausgegeben werden und zwar an der gleichen Stelle. Da habe ich jetzt gedacht, ich kann innerhalb der for-Schleife (s.o.) folgendes einfach eingeben:
if (eingabe[i]='') eingabe[i]='';Doch dann schreibt er folgendes aus: Character constant too long (or empty)
Ich will ja, dass es leer bleibt.Hat jemand einen Tipp für mich?
-
Beide Zeilen werden nie funktionieren, die if-Abfrage beinhaltet keinen Vergleich sondern eine Zuweisung. Eine Abfrage nach einem leeren Zeichen gibt es so nicht, denn dann gibt es diese Zeichen ja garnicht. Ein Leerzeichen ist wohl eher so
' ' //nicht ''
-
Danke,
habe das Problem leider immer noch. Werde langsam wahnsinnig und zwifel an meinem Können...
for (int i=1;i<=eingabe.Length();++i) //bis i die Länge des Eingabetextes erreicht hat { if (eingabe[i]=' ') eingabe[i]=' '; //if (eingabe[i]>=26) //eingabe[i]=eingabe[i]-26; eingabe[i]+=zahlen+1; //eingabe + zahlwert + 1 (warum +=???) } edtausgabe->Text = eingabe;Dieser Code ist mein Programm. Folgende Probleme habe ich jetzt:
Zeile 3 und 4 sollen Leerzeichen darstellen, d.h. Leerzeichen in der Eingabe sollen aus Leerzeichen in der Ausgabe sein.
Zeile 6 und 7 sollen das Ende des Codes bzw. den Anfang darstellen. Wenn das Alphabet bestehend aus 26 Buchstaben nicht mehr ausreicht, dann soll wieder von vorne angefangen werden, z.B. Eingabe = W , Zahlen = 10 , dann soll Ausgabe = G sein.
Bitte helft mir!!!
-
ich bin zwar kein C++ Neuling, aber ich habe folgendes Problem
Na gut, dann helfe ich auch mal einem erfahrenen C++ Progger -)
Zuerst einmal solltest du dich mit der ASCII-Tabelle beschäftigen (d.h. wie werden z.B. Buchstaben in char gespeichert).
// dieses Beispiel behandelt nur Kleinbuchstaben !!! // zahlen ist wohl dein Verschiebewert if(eingabe[i] >= 'a') { eingabe[i] += zahlen; if(eingabe[i] >= 'z') eingabe[i] -= 'z' - 'a' + 1; }Vielleicht verstehst du es ja jetzt.
-
Hallo,
danke für deine Hilfe, Habe dazu auch gleich einmal eine Frage: Ich verstehe das - Zeichen in Zeile 8 nicht:
eingabe[i] -= 'z' - 'a' + 1;Wofür steht das "-"-Zeichen? Ich habe zwar auch ein "+"-Zeichen in meinem Code, aber das verstehe ich auch nicht... Ich kenn mich zwar mit C++ aus, habe auch schon ne Projektarbeit damit bewältigt (mit ner 1!!!), aber ich würde mich nie als Profi, sondern immer nur als Anfänger bezeichnen.
Danke aber schon mal!
-
Ich glaub, ich bin zu blöd...
Habe deinen Vorschlag übernommen und es klappt, zumindestens für einen kleinen Verschiebefaktor. Wenn ich größere Zahlen nehme, wie z.B. 15 , bekomme ich immer nur Sonderzeichen als Antwort. Ich weiß nicht warum?
Bzgl. deines Tipps wegen Ascii-Code:
String eingabe = edteingabe->Text; String zeichenkette = eingabe.Length(); char* eingabe = edteingabe->Text.c_str(); //Umwandlung Text aus Eingabe von string in char strupr(eingabe); //Konvertierung in Großbuchstaben int ascii = int(char(eingabe+2));Das habe ich auch schon probiert, aber ich weiß nicht, wie ich die Buchstaben/Zahlen in den Ascii-Code umwandle, denn
int ascii = int(char(eingabe+2));halte ich nicht für richtig...
-
Hallo
Wenn du dir die ASCII-Tabelle mal genauer angeschaut hättest, wüstest du das dadrin auch die besagten Sonderzeichen drin sind. Dein Verschiebefakter wird immer draufgerechnet, egal ob Buchstabe oder Sonderzeichen rauskommt. Du must, wenn du über die Buchstaben hinaus verschiebst, eben die Verschiebung am anderen Ende des Buchstabenbereichens wieder fortsetzen.
Das - und das + arbeiten bei char genauso wie bei int. Für C++ ist char auch nur eine Zahl.
bis bald
akari
-
@mad21
mad21 schrieb:
for (int i=1;i<=eingabe.Length();++i) //bis i die Länge des Eingabetextes erreicht hat { if (eingabe[i]=' ') eingabe[i]=' '; ...nochmal kurz zu diesem Problem:
ist "if (eingabe[i]=' ')" ein Vergleich oder eine Zuweisung? wenn du das nicht weißt bzw. den Unterschied der beiden Begriffe nicht kennst wage ich zu bezweifeln dass du ein Projekt mit C++ selbst gemacht hast
-
Hallo Linnea,
auch wenn du es mir nicht glauben magst: JA, ich habe eine Projektarbeit mit Hilfe von C++ geschrieben. Und JA, ich habe dafür die Note 1 (sehr gut) bekommen!
Mit "if (eingabe[i]=' ')" will ich folgendes ausdrücken:
Wenn die Eingabe (in diesem Fall "i") ein Leerzeichen ist!!! Also ein Vergleich und KEINE Zuweisung.
Ich hoffe, es gibt jetzt nichts mehr zu bezweifeln.
Trotzdem Danke für die lobreiche Kritik!
-
Das muss ja eine toller Lehrer sein, der so eine Projektarbeit mit 1 bewertet hat.
Vergleich: ==
Zuweisung: =
-
Ja, das war eine tolle Lehrerin!
Dann hab ich nun mal das "="-Zeichen vergessen! Das komische ist nur, dass in meinem Quellcode nirgends ein "="-Zeichen drin stand und das immer funktioniert hat.
Das kann doch nicht sein oder?
-
Danke für eure Hilfe!
Nur eine Sache möchte ich noch einmal anmerken:
Ich finde es unfair, wie man hier Neulinge behandelt. Ich habe immer einen ordentlichen Text geschrieben und oft eine beleidigende Antwort bekommen, wie "hättest du mal genauer gelesen" oder "wage ich zu bezweifeln dass du ein Projekt mit C++ selbst gemacht hast". Das finde ich nicht sehr korrekt!
Ich hatte schon am Anfang darauf hingewiesen, dass ich ein Neuling bin! Es waren natürlich auch gute, hilfreiche Antworten dabei, aber wie sagt man so schön: Der Ton macht die Musik!
Trotzdem Danke!