CString in Substrings aufteilen
-
hi,
ich möchte folgendes machen:
CString strCurrentBackroundcolor = "255, 255, 255"; strCurrentBackroundcolor.Format("%2d, %2d, %2d", strR, strG, strB); // hier ist mein problem :( ich möchte den String strCurrentBackroundcolor in 3 weitere Strings aufteilen, um Sie mit einem int // unten einzufügen. Wie teile ich den String immer in 3 Teile ?? // denn mit strCurrentBackroundcolor.Format("%2d, %2d, %2d", strR, strG, strB); funktioniert es nicht int iR =atoi(strR); int iG =atoi(strG); int iB =atoi(strB); int r = iR; int g = iG; int b = iB; SetDialogBkColor(RGB(r, g, b));
asmodia
-
Hallo,
es funktioniert so ähnlich wie hier:
CString minuten = str.Left(2); // 2 Minuten CString sekunden = str.Mid(3,2); // 30 Sekunden CString zehntel = str.Right(1); // 1 (1/10) // Ergebnis in (1/10) Sekunden j = ((((atoi(minuten) * 60) + atoi(sekunden)) * 10) + atoi(zehntel));
Oder du benutzt den String Tokenizer.
MfG
-
gute frage?!?
eigentlich ist der String immer so aufgebaut:
255, 255, 255
oder
0, 150, 0
oder
110, 250, 180
wird bei deinem Beipsiel nur die Stellen berücksichtigt, oder auch die Kommas?
asmodia
-
Aloha,
auf die schnelle würde ich ohne groß zu denken bei identischen Trennzeichen ( in Deinem Falle das Komma ).
int n; CString strR = strCurrentBackroundcolor.Left(n = strCurrentBackroundcolor.Find(',')); CString strG = strCurrentBackroundcolor.Mid(n+1,strCurrentBackroundcolor.GetLength() - strCurrentBackroundcolor.Find(',',n+1)-1); CString strB = strCurrentBackroundcolor.Right(strCurrentBackroundcolor.GetLength()-strCurrentBackroundcolor.ReverseFind(',')-1);
Dann nur noch in Deine ints casten und fertisch ( Ungetestet, sollte aber passen )
Grüße
BOA
-
danke, das sieht gut aus.
ich werde es gleich mal testen.
asmodia
-
Hallo,
ich würde es so lösen:
//color CString strrgb="255,255,255"; //value int istelle=0; //r istelle=strrgb.Find(","); int r=atoi(strrgb.Left(istelle)); strrgb.Delete(1,istelle+1); //g istelle=strrgb.Find(","); int g=atoi(strrgb.Left(istelle)); strrgb.Delete(1,istelle+1); //b int b=atoi(strrgb.Left(istelle));
nicht gerade vielleicht sehr schnell aber naja .....nicht getestet
hoffe konnte helfen
weisnichtweiter
-
hi,
ihr seit alle voll net
So sieht jetzt mein Beispiel dank BOA aus
CString strCurrentBackroundcolor = "255, 255, 255"; int n; CString strR = strCurrentBackroundcolor.Left(n = strCurrentBackroundcolor.Find(',')); CString strG = strCurrentBackroundcolor.Mid(n+1,strCurrentBackroundcolor.GetLength() - strCurrentBackroundcolor.Find(',',n+1)-1); CString strB = strCurrentBackroundcolor.Right(strCurrentBackroundcolor.GetLength()-strCurrentBackroundcolor.ReverseFind(',')-1); int iR =atoi(strR); int iG =atoi(strG); int iB =atoi(strB); int r = iR; int g = iG; int b = iB; CString Color = strR+","+strG+","+strB; AfxMessageBox(Color); // nur zur Darstellung SetDialogBkColor(RGB(r, g, b));
Es funktioniert beim CString strCurrentBackroundcolor = "255, 255, 255";
in der MessageBox erscheint 255, 255, 255
Nun kann der String auch so aussehen
CString strCurrentBackroundcolor = "99, 16, 255";
und dann steht in der MessageBox 99, 16,, 255
Was dann natürlich nicht mehr funktioniert..
Weist du Boa wo der Fehler ist?
asmodia
-
Hi weisnichtweiter,
ich habe deinen Code jetzt auch versucht. Gefällt mir auch recht gut, nur besteht da das selbe Problem wenn der String so aufgebaut ist
CString strCurrentBackroundcolor = "99, 16, 255";
Hast du oder irgendwer anderes da eine Idee??
asmodia
-
Aloha,
jetzt hab ich mal getestet.
Tausch mal die mittlere aus
CString strG = strCurrentBackroundcolor.Mid(n+1,strCurrentBackroundcolor.Find(',',n+1)-(n+1));
Sollte funzen..
Grüße
BOA
-
funzt
Vielen vielen Dank BOA und allen anderen
asmodia
-
Aloha,
so richtig Hackerscheiße ist alles in einer Zeile...
int r = atoi(strCurrentBackroundcolor.Left(n = strCurrentBackroundcolor.Find(','))); int g = atoi(strCurrentBackroundcolor.Mid(n+1,strCurrentBackroundcolor.Find(',',n+1)-(n+1))); int b = atoi(strCurrentBackroundcolor.Right(strCurrentBackroundcolor.GetLength()-strCurrentBackroundcolor.ReverseFind(',')-1));
Unübersichtlich hoch zehn...
Grüße
BOA
-
Hallo,
und meins auch nochmal korrigiert auch wenns ein wenig
länger ist:
CString strstring="99,16,255"; int n; CString strR=strstring.Left(n=strstring.Find(",")); UpdateData(FALSE); strstring.Delete(0,n+1); UpdateData(FALSE); CString strG=strstring.Left(n=strstring.Find(",")); strstring.Delete(0,n+1); UpdateData(FALSE); CString strB=strstring; MessageBox(strR+","+strG+","+strB);
bis denn
weisnichtweiter