2017-04-06 10 views
1

Ich habe eine Funktion gemacht, die einen meiner Datenpunkte trennt, um ein Zeichen zu eliminieren. Ich möchte R: G: B: in die 3 Zahlen einfügen. So zum Beispiel, wenn die Werte sind 255,0,0 als esWie füge ich ein Zeichen in eine vordefinierte Zeichenfolge ein?

wird
255 
0 
0 

ich es

R:255 
G:0 
B:0 

Dies sein will, ist die Funktion, die ich gemacht, um die Kommas zu trennen.

#include string 
    void RGB(string input) 
{ 
    istringstream ssString(input); 

    while (getline(ssString, input, ',')) 
     cout<< input << endl; 


} 
+0

Verfolgen Sie, welche Zeile Sie lesen und hängen Sie R, G oder B entsprechend an. Versuchen Sie auch, 'const string & input 'in Ihrer Signatur zu verwenden, um unnötiges Kopieren zu vermeiden. – tadman

+0

Was genau ist dein Problem? – chbchb55

+0

@tadman Ich habe versucht, das zu tun, aber da es in einer while-Schleife ist, wiederholt es einfach diese Zeichen, also wenn ich nur R machen müsste: Mir geht es gut, aber jede Iteration muss anders sein und ich weiß nicht wie implementieren das. – Rafael

Antwort

1

Sie können einfach durch ein Array Ihrer Präfixe iterieren. So etwas würde ausreichen.

const char *prefix[3] = { "R:", "G:", "B:" }; 
for(int p = 0; p < 3 && getline(ssString, input, ','); p++) 
{ 
    cout << prefix[p] << input << endl; 
} 
+0

Vielen Dank für Ihre Hilfe. – Rafael

0

Ein Weg, dies zu tun, ohne das Hinzufügen oder Linien aus dem Code subtrahieren wäre:

int c = -1; // counter 
    while(std::getline(ssString, input, ',')) 
     std::cout << (++c == 0 ? 'R' : c == 1 ? 'G' : 'B') << ": " << input << std::endl; 
    return 0; 

Der ternäre Operator verwendet eine Zählervariable, die bei -1 beginnt eliminiert die ternären die Notwendigkeit für mehr wenn Aussagen. Hinweis: Sie müssen das Ternärzeichen in Klammern setzen () andernfalls wirft der Compiler Fehler bei Ihnen.

Verwandte Themen