C - string Konstante einem char zuweisen

OP #1381971
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ß
#1381993
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
#1382033
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
}

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