Vergleich von 2 stringarrays
-
Hallo,
also folgendes problem
ich habe zwei stringsstring test="123r45"; string prüfer="0123456789";so und ich möchte diese beiden strings stelle für stelle vergleichen um herauszufinden ob es ein element gibt was in dem teststring nicht existieren darf, das wäre in diesem falle das "r" wie kann ich nun die beiden strings trotz ihrer unterschiedlichen größe index für index vergleichen, also 1 und 1... usw um dann übereinstimmungen zu finden oder nicht zu finden...ich habe es shcon mit 2 shcleifen probiert aber das hat nicht geklappt...
kann mir da einer helfen.
danke
-
Ich würde in einer Schleife alle Zeichen des test-Strings durchgehen und mit std::find gucken, ob das Zeichen im Prüf-String enthalten ist

-
brauche ich für find ne bestimmte include...und wie is der allgemeine syntax von find??
-
if(test.find_first_not_of(prüfer) != std::string::npos)
-
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.