Dubletts und Trippletts in einem String finden
-
Hallo,
folgendes Problem: Aus einem String s sollen die Dubletts(zwei gleiche aufeinander folgende Buchstaben) und die Tripletts (drei gleiche aufeinander folgende Buchstaben) ermittelt werden. Nach meiner Lösung macht er aber aus einem Triplett zwei Dubletts. Irgendwie mit einer Zählschleife soll das gehen, hab aber leider keine Ahnung wie...
Wer kann mir helfen?
mfg
YAY
-
wenn er ein triple gefunden hat, schleife gleich erhöhen:
mein ansatz:int main(int argc, char* argv[]) { string eingabe; cin>>eingabe; int dou=0; int tri=0; for(int i=0;i<eingabe.length();i++) { if(eingabe[i]==eingabe[i+1]) { if(eingabe[i+1]==eingabe[i+2]) { cout<<"Tripple "<<eingabe[i]<<eingabe[i+1]<<eingabe[i+2]<<endl; tri++; i++; //hier gleich erhöhen, da er sonst im nächsten durchlauf das triple als double erkennt (erster durchlauf sss=triple, danach ss=double) } else { cout<<"Double "<<eingabe[i]<<eingabe[i+1]<<endl; dou++; } } } cout<<"Doubles:"<<dupp<<endl; cout<<"Triples:"<<tripp<<endl; getch(); return 0; }funktioniert aber nur für ein wort, nicht für einen satz
-
Du mußt zuerst überprüfen, ob du ein Triplett hast (s[i]==s[i+1]&&s[i]==s[i+2]), wenn ja, bist du fertig, wenn nein, kannst du mit der Prüfung auf Dubletts weitermachen.
(andersherum würde das Programm die Dreiergruppen schon bei der Dublett-Überprüfung rausfiltern)
-
CStoll schrieb:
Du mußt zuerst überprüfen, ob du ein Triplett hast (s[i]==s[i+1]&&s[i]==s[i+2]), wenn ja, bist du fertig, wenn nein, kannst du mit der Prüfung auf Dubletts weitermachen.
(andersherum würde das Programm die Dreiergruppen schon bei der Dublett-Überprüfung rausfiltern)richtig, oder so....

meins funktioniert aber auch :p
-
s = Edit1->Text; d = t = 0; for (int i=1;i<s.Length()-1;i++) { if ((s[i]==s[i+1])&&(s[i+1]==s[i+2])) { t++; i++; } else if (s[i]==s[i+1]) d++; } Label1->Caption = IntToStr(d); Label2->Caption = IntToStr(t);Das ist meine Lösung. Da gibt es nur noch ein Problem:
Wörter wie "Ball" werden nicht erkannt, da i<s.Length()-1 aber wenn ich das weglasse stürtzt es, weil durch das s[i+1]==s[i+2] gerät es aus dem Range des Strings.
-
dann mach eine abfrage rein ob i+2 größer als die größe des strings ist *rolleyes*
-
Ich hab an dem String ein Leerzeichen angehängt...
So gehts auch....
Danke euch allen!
-
std::string dat = "haallloooo Welt !!!!"; std::string::size_type curpos= 0; while( curpos+1 < dat.length() ){ while (curpos+1 <= dat.length() && dat.compare(curpos, 1, dat, curpos+1,1 ) == 0 ) dat.erase ( curpos+1,1); curpos+=1; }das sollt gehn, hat aber den nachteil das es nicht nur 2 oder 3 sondern beliebige wiederhohlungen verhindert.
event kann mans noch ein bissl verschoenern