Zum Inhalt springen

zahl abfragen


Artox

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen


#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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :-(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

sacho 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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

  }

Link zu diesem Kommentar
Auf anderen Seiten teilen



#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

???

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen



#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 ??

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen


#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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ersetzten

Klar 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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...