Variable in Variable

OP #1483416
Lesenswert?

Guten Abend miteinander.

Die Frage wird von euch wahrscheinlich schnell beantwortet sein:

Ich habe einen String. Sagen wir colour. Die kann die folgende "red", 
"blue", "green" und "yellow" haben.

Jetzt will ich wenn colour = "green" die Variable green (unsigned char) 
verändern... Genauso mit den anderen Farben.

Ich kann das natürlich mit if und case usw machen. Aber da gibt es doch 
bestimmt eine elegantere Lösung, oder?

Also so irgendwie:

color = "red";
.color += 1; //erhöht die Variable red um 1

color = "green";
.color += 1; //erhöht die Variable green um 1

Wäre nett wenn ihr mir da weiterhelfen könntet...
Danke!
Gast #1483422
Lesenswert?

> Ich kann das natürlich mit if und case usw machen.

Mit case kannst du es nicht machen.

> Aber da gibt es doch bestimmt eine elegantere Lösung, oder?

case wäre die elegante Lösung, wenn sie ginge.

> Also so irgendwie:
>
> color = "red";
> .color += 1; //erhöht die Variable red um 1
>
> color = "green";
> .color += 1; //erhöht die Variable green um 1

Ach sowas suchst du.  Das gibt's in C nicht.
Gast #1483634
Lesenswert?

1
struct {
2
  int red;
3
  int green;
4
  int blue;
5
} colors;
6

7
struct {
8
  const char *const name;
9
  int *color;
10
} mapping[] = {
11
  { "red", &colors.red },
12
  { "green", &colors.green },
13
  { "blue", &colors.blue }
14
};
15

16

17
void set_color(char *name, int color) {
18
  for (size_t i = 0; i < sizeof(mapping) / sizeof(mapping[0]); i++) {
19
    if (strcmp(mapping[i].name, name) == 0) {
20
      *(mapping[i].color) = color;
21
      break;
22
    }
23
  }
24
}

Alternativ könnte man den Vektor auch von Hand sortieren und bsearch() 
benutzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren