Forum: PC-Programmierung C - string Konstante einem char zuweisen


von Korbinian G. (c4orbi)


Lesenswert?

Hallo,


ich würde gerne eine Define Liste in C anlegen die mir einen String 
einem Char zuweist, so dass der Compiler weiß was er tun soll wenn 
dieser String eingegeben werden wird.

Beispiel:

Um das Relais 1 anzuschalten habe ich im Programm den charwert 'a' 
definiert.
Nun ist das für die Eingabe relativ unkomfortabel.

Daher soll der Compiler wenn jmd eingibt: Relais01an dies in den 
charwert 'a'
umsetzen.

Leider habe ich dies weder mit #define ... noch mit const ... 
hinbekommen.

Ich hoffe, jmd kann mir weiterhelfen.
Danke schonmal im Vorraus!

gruß

von Patrick M. (patrickmarkl)


Lesenswert?

Hi Korbinian,

das musst Du ausprogrammieren. Ein Mapping String -> char gibt es nicht.

Könnte so ausschauen:

const char myString[2] =
{
uga1,
uga2
};

const char Code[2] =
{
  'a',
  'b'
};

char GetCode(char* pString)
{
  for(i = 0; i < 2; i++)
  {
    if(0 == strcmp(myString[i] == pString)
    {
      return(Code[i]);
    }
  }

  return(0xFF);
}



Gruß
Patrick

von Karl H. (kbuchegg)


Lesenswert?

Patrick Markl schrieb:
> Hi Korbinian,
>
> das musst Du ausprogrammieren. Ein Mapping String -> char gibt es nicht.
>
> Könnte so ausschauen:
>
> const char myString[2] =

const char * myString[2] =


Aber für so etwas setzt man zum Zwecke der besseren Wartbarkeit am 
besten Strukturen ein
1
struct CommandMapping
2
{
3
  const char* commandString;
4
  char        commandShortcut;
5
};
6
7
struct CommandMapping commands[] =
8
{
9
  { "Relais1On",  'a' },
10
  { "Relais1Off", 'b' },
11
  { "Relais2On",  'c' },
12
  { "Relais2Off", 'd' },
13
};
14
15
#define NR_COMMANDS  ( sizeof( commands ) / sizeof( *commands ) )
16
17
char UnmapCommand( const char * string )
18
{
19
  uint8_t i;
20
21
  for( i = 0; i < NR_COMMANDS; ++i ) {
22
    if( !strcmp( commands[i].commandString, string ) )
23
      return commands[i].commandString;
24
  }
25
26
  return ' ';
27
}
28
29
int main()
30
{
31
  char code;
32
33
  code = UnmapCommand( "Relais2On" );
34
35
  switch( code ) {
36
    ...
37
    case 'c':
38
      ...
39
      break;
40
41
  }
42
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.