Array
-
Du hast eine kleinigkeit nicht berücksichtigt.
Du verwendest die Count-Zählvariabele, um mit genau dieser in eines der neuen Array Einträge zu schreiben.
Problem: Wenn du 19 Buchstaben am Stück hast - Toll klappt,
aber wenn der 20 eine Ziffer ist, versuchst du in Ziffer[19] einzutragen, obwohl, das ja eigentlich dein erster Wert in diesem array ist.
Überlege nochmal, ob du nicht in deine if- else Anweisung jeweils einen separaten integerwert einsetzt, den du einfach mit ++ um eins erhöchst, wenn du in den entsprechen den Abschnitt läufst und dann diese Zähler zum eintragen in den Array nutzt.
-
Sorry das ich wieder nerve mir fällt das einfach schwer und wüsste nicht weiter.
also er gibt mir jetzt die Anzahl der buchstaben und die ziffern aus.Aber wie kann ich die ziffern einzlen aufrufen und die buchstaben ebenfalls.
#include <iostream> #include <conio.h> #include "conioex.h" using namespace std; int main() { char zeichen[20],ziffern[20],buchstaben[20],entscheidung; int zeichen1=0,ziffer=0; do { system("cls"); ziffer=0; zeichen1=0; for(int counter=0;counter<20;counter++) { cout<<"Geben Sie ein Zeichen ein=> "; cin>>zeichen[counter]; if(zeichen[counter]>48 && zeichen[counter]<57) { textcolor(RED); cout<<"Ziffer"<<endl; textcolor(LIGHTGRAY); ziffern[zeichen1++]=zeichen[counter]; } else { textcolor(RED); cout<<"Zeichen"<<endl; textcolor(LIGHTGRAY); buchstaben[ziffer++]=zeichen[counter]; } } cout<<"Es wurden "<<zeichen1<<" Ziffern gefunden."<<endl; cout<<"Ziffern waren=> "<<endl; cout<<"Es wurden "<<ziffern<<" Zeichen gefunden."<<endl; cout<<"Zeichen waren=> "; cout<<endl<<endl; cout<<"Wollen Sie das Programm wiederholen?(j/n)=> "; cin>>entscheidung; } while(entscheidung=='j'); getch(); return 0; }
-
Hmm also ... das ganze ist eigentlich ganz einfach zu machen ... das ist deine Ausgangssache da mal in sauberen C++ geschrieben ...
#include <iostream> #include <string> int main(void) { std::cout << "Geben Sie eine Kette aus Zeichen und/oder Zahlen ein!" << std::endl; std::string sInput; std::getline(std::cin, sInput); for (std::string::size_type pos = 0; pos < sInput.length(); ++pos) std::cout << sInput[pos] << " ist ein" << ((sInput[pos] > 48 && sInput[pos] < 58 ? "e Zahl!" : " Zeichen!")) << std::endl; // nimm doch kein getch ... mach es so! std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); return 0; }
So ... das jetzt noch um den Rest erweitern ... das geht am einfachsten mit einem std::vector<char> ...
-
achja ... du kannst es dann entweder so machen:
std::vector< std::pair<char, bool> > chars; for (std::string::size_type pos = 0; pos < sInput.length(); ++pos) chars.push_back(std::pair<char, bool>(sInput[pos], (sInput[pos] > 48 && sInput[pos] < 58)));
Wobei du dann mit chars[n].second == true gucken kannst ob es eine Zahl ist ...
-
So und um genau das zu machen was du haben wolltest ...
#include <iostream> // Brauchen wir für std::cout usw #include <string> // Da ist std::string drin ... (wesentlich schöner als char*) #include <sstream> // und hier std::stringstream (Brauchen wir um std::string in unsigned int umzuformen ...) #include <vector> // hmm std::vector (in etwa das selbe wie ein dynamischer Array) int main() { std::cout << "Geben Sie eine Kette aus Zeichen und/oder Zahlen ein!" << std::endl; // Halt deine Ausgabe ... std::string sInput; // Einen String anlegen ... ist sowas in der Art wie ein char Array ... std::getline(std::cin, sInput); // ließt bis zum nächsten \n die Eingabe des Benutzers ein ... [ENTER] ;) std::vector<char> chars; // dynamischer Array (vereinfacht gesagt), da wir ja nicht wissen wie viele Zeichen da denn jetzt in dem String sind ... std::vector<unsigned int> numbers; // s. o. std::stringstream ss; // Brauchen wir nur um, falls es eine Zahl ist, das Char in einen Unsigned int umwandeln zu können ... eigentlich sollte man wohl eher unsigned short nehmen ... kleiner Fehler von mir ... unsigned int number; // eine temp variable ... damit wir das charinunsignedint irgendwo reintuen können ^^ for (std::string::size_type pos = 0; pos < sInput.length(); ++pos) // jedes Zeichen des strings durchgehen ... wobei std::string::size_type halt auch nurn Datentype ist ... { if (sInput[pos] > 48 && sInput[pos] < 58) // Das kennst de ja von deinem Code ... { ss.clear(); // Da ja schon was im stream stehen kann den mal clearen ss.str(""); // und auf "" setzen ... ss << sInput[pos]; // Unseren char reingeben (vereinfacht) ss >> number; // Unsere Zahl rausholen (vereinfacht) numbers.push_back(number); // die Zahl an das Ende unseres dynamischen Array dranhängen (vereinfacht ^^) } else chars.push_back(sInput[pos]); // wenn es ein Zeichen ist direkt in den array für die zeichen hinten dran setzen ... } std::cout << "Die Kette enthaelht " << numbers.size() << " Zahlen und " << chars.size() << " Zeichen!" << std::endl; // Halt ausgeben wieviele elemente in den dynamischen array std::cout << "Zahlen: " << std::flush; for (size_t item = 0; item < numbers.size(); ++item) // alle zahlen durchgehen std::cout << numbers[item]; // und ausgeben std::cout << std::endl << "Zeichen: " << std::flush; for (size_t item = 0; item < chars.size(); ++item) // s.o. nur für zeichen std::cout << chars[item]; std::cout << std::endl; // Nimms einfach so wie es ist ^^ muss du nicht verstehen was jetzt kommt ^^ std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); return 0; }
Ist zwar ein wenig Speicherverschwendung ... aber was soll's ^^
[edit]So habs kommentiert ... aber hab es dir in einer vereinfachten version da hingeschrieben ... was genau da passiert ist ein wenig komplizierter ... [/edit]
-
sorry aber ich kann damit nicht anfangen, da ich gerade mal if else, schleifen behandelt habe
gehts auch auf einfacher artmit arrays
-
Hmm ja ... also ... der Code den ich dir da geschrieben hab, hat halt ein paar Vorteile, wie bsw. das du nicht die Anzahl der maximal einzugebenden Zeichen festlegen musst ... ist keine Begrenzung drin
Ich kommentier es dir mal ...
-
ok dankeschön ich versuch mich mal daran
-
Wäre nett, wenn du dir mal das richtige Unterforum anguckst.
Ich denke mal im Konsolenforum bist du besser aufgehoben.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.