Artox Geschrieben 22. März 2007 Geschrieben 22. März 2007 hallo ersmal also was mein problem ist wäre ich möchte in einer zahlen kette prüfen ob eine bestimmte zahl darin vorkommt also z.b. 4 44 56446 und ich will halt prüfen ob da in der zahl z.b. ein 4 vorkommt habe das schon mit char probiert und ne array angelegt nun ist ja leider so das jedes zeichen als ascii gespeichert wird z.b. die zahl 4 als 52 mhh und da ist mein problem wenn ich das dann überprüfen möchte also z.b. die zahl 4 auslesen dann liest er mir die 52 aus aber net die 4 kann mir da jemand nen tipp geben ?? danke Zitieren
sacho Geschrieben 22. März 2007 Geschrieben 22. März 2007 ich möchte in einer zahlen kette prüfen ob eine bestimmte zahl darin vorkommt also z.b. 4 44 56446 [...] habe das schon mit char probiert und ne array angelegt nun ist ja leider so das jedes zeichen als ascii gespeichert wird z.b. die zahl 4 als 52 Wenn die Zahlen als Zeichenkette (char-Array) gespeichert werden, brauchst du doch nur ne Schleife: for(i=0; i<nLaengeZeichenkette; i++) { if (ZeichenKetteMitZahlen[i] == '4') { // Übereinstimmung } } Du hast wahrscheinlich auf == 4 geprüft? Alternativ könnte man ein int-Array für jede Zahl nehmen und jede Stelle entspricht dann einer Ziffer. Wobei die Variante dann mehr speicher verbrauchen würde als ne Zeichenkette. Zitieren
Artox Geschrieben 22. März 2007 Autor Geschrieben 22. März 2007 #include<iostream> using namespace std; void main(void) { int matrix; int matrixA = 0; int i = 0; int j = 0; cout<<"Bitte geben sie eine Zahl für die Matrix an :"; cin>>matrix; for(i=1;i<=10;i++) { for(j=1;j<=10;j++) { matrixA=matrixA++; if(matrixA==matrix) cout<<" * "; else cout<<" "<<matrixA; } cout<<endl; } } das ist mein jetztiger quell text sin ist es das alle Zahlen die der Benutztereingabe entsprechen mit einem * gekenntzeichnet werden. wenn die eingegebene zahl darin vorkommt also halt z.b. eingabe 4 also werden alle zahlen von 1-100 die eine 4 enthalten durch einen stern ersetzt. wollte das erst mit char machen da ich ja eine zahl als char eingeben kann und so halt jede arry auf den inhalt prüfen kann nur konvertiert Char die dinger intern ja in ascii also überprüft er an stelle von der zahl 4 auf den ascii wert 52 Zitieren
sacho Geschrieben 22. März 2007 Geschrieben 22. März 2007 #include<iostream> [COLOR="Red"][B]matrixA=matrixA++;[/B][/COLOR] if(matrixA==matrix) Also wenn dann matrixA = martixA + 1 oder nur matrixA++ Schau dir mal die String-Klasse an. Die Methoden find und replace können dir da sicher weiterhelfen. Zitieren
Artox Geschrieben 22. März 2007 Autor Geschrieben 22. März 2007 mhh so recht hilft mir das auch nicht weiter das problem ist oder zumindest glaube ich das das ja die eingegebene Var konstant bleibt und eine zweite variable hochgezählt wird und immer wenn die eingegeben in irgendeiner form also egal wo darin vorkommt soll sie ersetzt werden beim string habe ich das problem das ich diesen nicht als zahl hochzählen kann :-( Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 wollte das erst mit char machen da ich ja eine zahl als char eingeben kann und so halt jede arry auf den inhalt prüfen kann nur konvertiert Char die dinger intern ja in ascii also überprüft er an stelle von der zahl 4 auf den ascii wert 52sacho hat dir doch den entscheidenden Hinweis bereits gegeben:Prüf auf '4', nicht auf 4. Wenn du unbedingt die Eingabe als Zahl verarbeiten willst, musst du sie durch wiederholtes % 10 und /= 10 in ihre Einzelziffern zerlegen und hinterher wieder zusammensetzen. Dann doch lieber als String Zitieren
sacho Geschrieben 23. März 2007 Geschrieben 23. März 2007 beim string habe ich das problem das ich diesen nicht als zahl hochzählen kann :-( Bin zwar kein C++ - Profi, von daher kann es sein, dass es auch elegantere Lösungen gibt, aber das wäre eine Möglichkeit: // wandelt Integer in einen String string intToString(int n) { ostringstream stream; stream << n ; return (stream.str()); } und dann in einer Schleife entsprechend die Erzeugung der Strings: string Zahlen[100]; for(i=0; i<100; i++) { Zahlen[i] = intToString (i+1); } Zitieren
Artox Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 #include<iostream> using namespace std; void main(void) { int eingabe = 0; int zaehler = 0; int i= 0; int j = 0; int matrixA =0; int matrixB =0; cout<<"ZAhl: "; cin>>eingabe; for(i=0;i<10;i++) { for(j=0;j<10;j++) { zaehler++; if(zaehler==eingabe && zaehler<10) cout<<" * "; else if(zaehler>10 && zaehler<100) { matrixA=zaehler/10; if(matrixA==eingabe) cout<<" * "; matrixA=0; matrixA=zaehler%10; if(matrixA==eingabe) cout<<" * "; cout<<" "<<zaehler; } else cout<<" "<<zaehler; } cout<<endl; } } So das ist mein code der geht jetzt fast 100% nur sinn ist es das alle zahlen zwischen 1 und 100 die die eingegeben zahl enthalten mit einem * ersetzt werden soll leider wird zwar der stern gesetzt aber die zahl dazu ausgegeben ??? Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 Weil du auch dann zaehler ausgibst, wenn die Zahl gefunden wurde. Wenn du deinen Code mal ordentlich einrücken würdest, fällt's dir vielleicht eher auf. Das sieht ja aus wie Kraut und Rüben. Zitieren
sacho Geschrieben 23. März 2007 Geschrieben 23. März 2007 Wenn du deinen Code mal ordentlich einrücken würdest, fällt's dir vielleicht eher auf. Das sieht ja aus wie Kraut und Rüben. Das muss nicht unbedingt an Artox liegen. Wenn man im Editor ein Mix aus Tabs und Leerzeichen hat, sieht das zwar im Editor schickt aus, aber wenn mans hier einfügt wie Kraut und Rüben. @Artox vielleicht würde der ein oder andere Kommentar noch helfen. Wenn da stehen würde, für was matrixA steht und warum jetzt an der Stelle ein * gesetzt wird, dann sollte es dir wie Schuppen von den Augen fallen Achja, was ich schon bei meinem ersten Post sagen wollte: Die main-Funktion hat einen int als Rückgabetyp bzw. muss haben. Zitieren
UltimateRuppi Geschrieben 23. März 2007 Geschrieben 23. März 2007 Das muss nicht unbedingt an Artox liegen. Wenn man im Editor ein Mix aus Tabs und Leerzeichen hat, sieht das zwar im Editor schickt aus, aber wenn mans hier einfügt wie Kraut und Rüben. Wenn man im Editor einen Mix aus Tabs und Leerzeichen hat, dann würd ich das nicht als ordentlich eingerückt bezeichnen. Zitieren
Artox Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 #include<iostream> using namespace std; void main(void) { int eingabe = 0; int zaehler = 0; int i= 0; int j = 0; cout<<"Zahl: "; cin>>eingabe; for(i=0;i<10;i++) { for(j=0;j<10;j++) { zaehler++; if(zaehler==eingabe) cout<<" * "; else if(eingabe==zaehler/10) cout<<" * "; else if(eingabe==zaehler%10) cout<<" * "; else cout<<" "<<zaehler; } cout<<endl; } } so jetzt schöner ^^ also geht jetzt einzige frage kann man es hinbekommen das bei der ausgabe alle zahlen rechtsbündig stehen also schön untereinander?? wenn ja wie so das das dann auch bei 1000 geht ?? Zitieren
Artox Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 Danke erledigt habe das mit der setw(WERT) geschaft danke aufjedenfall Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 so jetzt schöner ^^Nein, nicht wirklich . Der Mischmasch aus Tabs und Leerzeichen ist schon recht eigenwillig. einzige frage kann man es hinbekommen das bei der ausgabe alle zahlen rechtsbündig stehen also schön untereinander??Das geht von ganz allein, wenn du mit dem Manipulator setw die Ausgabebreite setzt. wenn ja wie so das das dann auch bei 1000 geht ??Wenn du dich vorher nicht auf einen Zahlenbereich festlegen willst, sind wohl doch Strings die bessere Lösung: #include <string> #include <sstream> #include <iomanip> #include<iostream> using namespace std; int main() { string eingabe; cout<<"Zahl: "; cin>>eingabe; for(int zaehler=1; zaehler <= 1000; ++zaehler) { cout << setw( 6 ); ostringstream ss; ss << zaehler; if( ss.str().find( eingabe ) != string::npos ) { cout << "*"; } else { cout << zaehler; } cout << '\n'; } }[/Code] Zitieren
Artox Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 #include <string> #include <sstream> #include <iomanip> #include<iostream> using namespace std; int main() { string eingabe; cout<<"Zahl: "; cin>>eingabe; for(int zaehler=1; zaehler <= 1000; ++zaehler) { cout << setw( 6 ); ostringstream ss; ss << zaehler; if( ss.str().find( eingabe ) != string::npos ) { cout << "*"; } else { cout << zaehler; } cout << '\n'; } } Toll super genau das ist das was ich gesucht habe aber nicht so recht hinbekommen habe nur noch zum verständnis( in sachen Strings und C++ fehtl mir einfach noch ne menge wissen) ostringstream ss; erzeugt ein string object ss welches in der lage ist binäre daten wieder auszugeben oder?? ss << zaehler; hier wird der wert von zaehler an ss übergeben?? nur die Zeile verstehe ich nicht ganz. if( ss.str().find( eingabe ) != string::npos ) nur so vile das .find so viel bedeutet das er im string ss dem vorher der wert von zaehler übergeben wurde die eingabe sucht Frage ist es durch so eine Funktion auch möglich nicht die ganze Zahl zu kicken bzw durch einen * zu ersetzten sonder den String ganz zu lassen und nur den wert in der zahl durch ein * zu ersetzten Bsp.: anstelle von 343 = * 343 =3*3 ?? Danke auf jeden fall Zitieren
Klotzkopp Geschrieben 23. März 2007 Geschrieben 23. März 2007 ostringstream ss; erzeugt ein string object ss welches in der lage ist binäre daten wieder auszugeben oder??Nicht ganz. Ein Stringstream ist eigentlich das gleiche wie ein Filestream, nur dass du nicht mit Dateien als Datenquelle bzw. -ziel arbeitest, sondern mit Strings. Ein ostringstream ist also wie ein ofstream, nur dass du nicht in eine Datei schreibst, sondern in einen String. ss << zaehler; hier wird der wert von zaehler an ss übergeben?? Richtig. nur die Zeile verstehe ich nicht ganz. if( ss.str().find( eingabe ) != string::npos )Die str-Methode des Stringstreams liefert sozusagen das Ergebnis aller Einfügeoperationen, den fertigen String. In diesem Fall ist das eine Stringdarstellung der int-Variablen zaehler, die wir vorher reingesteckt haben. Der String wiederum hat eine Methode namens find, die es ermöglicht, im String nach etwas zu suchen. In diesem Fall suchen wir nach der eingegebenen Zahl. find liefert die erste Position, an der der gesuchte String gefunden wurde, oder eben string::npos, wenn nichts gefunden wurde. Frage ist es durch so eine Funktion auch möglich nicht die ganze Zahl zu kicken bzw durch einen * zu ersetzten sonder den String ganz zu lassen und nur den wert in der zahl durch ein * zu ersetztenKlar geht das. #include <string> #include <sstream> #include <iomanip> #include<iostream> using namespace std; int main() { string eingabe; cout<<"Zahl: "; cin>>eingabe; for(int zaehler=1; zaehler <= 1000; ++zaehler) { cout << setw( 6 ); ostringstream ss; ss << zaehler; string s = ss.str(); while( true ) { int findpos = s.find( eingabe ); if( findpos == string::npos ) { break; } s.replace( findpos, 1, "*" ); } cout << s << '\n'; } }[/code]Man holt den String aus dem Stringstream (mit str()), und sucht dann in einer Schleife nach der eingegebenen Zahl und ersetzt sie durch ein Sternchen. Man könnte das auch mit transform oder for_each oder einem benutzerdefinierten Manipulator machen, aber so ist es wohl am verständlichsten. Zitieren
Artox Geschrieben 23. März 2007 Autor Geschrieben 23. März 2007 super das werde ich mir noch sehr genau ansehen. und einverleiben. danke auf jeden fall Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.