Vergleich von 2 stringarrays
-
pruefer.find( test[ i ] );
-
btw. wenn du das brauchst um nen string auf zahlen zu begrenzen:
Wenn du sowas wie 12x222 über nen stringstream in nen interger drückst wird es zu 12.
-
#include<iostream> #include<string> using namespace std; int main() { string test="123r4"; string prüfer="0123456789"; int fehlerstelle; for(int i=0;i<test.size();++i) { if(prüfer.find( test[i])!=prüfer) { test[i]=fehlerstelle; cout<<"Es gab ein Fehler an der"<<fehlerstelle<< ". Stelle"<<endl; } } }so ich habe es jetzt mal so...ich will ja auch noch sagen anw elcher stelle es den fehler gab, aber der compiler meckert an der
!=stelle, warum weiß ich nciht, kann mir da einer helfen und helfen was falsch ist?
-
schau dir doch mal an was string.find() zurückliefert. Das du das nicht mit prüfer vergleichen kannst sollte klar sein.
Ansich stehen hier schon echt einige Hilfen, jetzt ists an dir es so umzusetzen dass dus kapierst.
-
es muss heißen
if(prüfer.find(test[i])!= string::npos)
-
Diese Umlaute in den Bezeichnern... *schauder*
-
David_pb schrieb:
Diese Umlaute in den Bezeichnern... *schauder*
Ich wusste auch gar nicht, dass das geht

-
Sama ist die Reihenfolge dir auch wichtig? Sonnst ist nämlich GreyHound's Vorschlag sehr schön

#include <iostream> #include <string> #include <algorithm> int main() { std::string kennzahl; std::string allowed_letter("0123456789.:,;"); do { std::cout << "Neue Kennzahl: " << std::flush; std::cin >> kennzahl; } while (kennzahl.find_first_not_of(allowed_letter) != std::string::npos); }...
Wenn die Reihenfolge drin sein muss:
#include <iostream> #include <string> int main() { std::string test("012sd567o9"); std::cout << "String: " << test << std::endl; std::string allowed_letter("0123456789.:,;"); std::size_t search_len = std::min<std::size_t>(test.length(), allowed_letter.length()); for (std::size_t pos = 0; pos < search_len; ++pos) if (test.at(pos) != allowed_letter.at(pos)) std::cout << "Nicht identisch mit Teststring bei " << pos + 1 << std::endl; }...
-
kann mir vielei noch einer erklären was das string npos bedeutet??
und is das "find_first_not_of" ( )" ne funktion?=???
-
//Traditionell mit Hilfe der Basistechniken geht es z.B. so: #include <string> #include <iostream> using namespace std; int main() { string teste = "0123r45"; string pruefer = "0123456789"; for (size_t i = 0, len = teste.length (); i < len; i++) if (*(teste.c_str ()+i) != *(pruefer.c_str ()+i)) cout << "Unterschied an Position " << i << " teste = " << teste.c_str ()[i] << " pruefer = " << pruefer.c_str ()[i] << endl; }
-
Hallo
Firefighter schrieb:
kann mir vielei noch einer erklären was das string npos bedeutet??
und is das "find_first_not_of" ( )" ne funktion?=???
Findest du alles hier erklärt.
bis bald
akari
-
wie kommst du den auf 174 beiträge wenn dir nichma die strings usw. bekannt sind?
-
naja durch viele fragen, und ich habe mich vorher mehr mit zahlen in c++ beschäftigt und sowas...also mti strings hatte ich noch net viel jemacht
-
kennzahl.find_first_not_of(allowed_letter) != std::string::nposNja ... std::string::npos wird bsw. von den find-Funktionen eines std::strings zurück gegeben, wenn etwas nicht gefunden werden konnte ... bzw. wird es auch bei der erase-Funktion genutzt um einfach den kompletten String zu löschen ...
std::size_t search_len = std::min<std::size_t>(test.length(), allowed_letter.length());bewirkt halt, das du die Länge von dem kürzeren String nimmst, damit du nicht über die Grenzen des Speicherbereichs von einem von beiden kommst.
if (test.at(pos) != allowed_letter.at(pos))nimmst halt die Zeichen an(at) Position pos ... in dem Fall muss nicht unbedingt at genommen werden(normal ist es aber immer sinnvoll da es eine Exception wirft wenn du außerhalb des Speicherbereiches bist!) ... kannst auch operator[] da ja mit std::min sichergestellt ist, das du nicht aus dem String rauskommst.