mikrocontroller.net

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


Autor: Korbinian G. (c4orbi)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Patrick Markl (patrickmarkl)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
struct CommandMapping
{
  const char* commandString;
  char        commandShortcut;
};

struct CommandMapping commands[] =
{
  { "Relais1On",  'a' },
  { "Relais1Off", 'b' },
  { "Relais2On",  'c' },
  { "Relais2Off", 'd' },
};

#define NR_COMMANDS  ( sizeof( commands ) / sizeof( *commands ) )

char UnmapCommand( const char * string )
{
  uint8_t i;

  for( i = 0; i < NR_COMMANDS; ++i ) {
    if( !strcmp( commands[i].commandString, string ) )
      return commands[i].commandString;
  }

  return ' ';
}

int main()
{
  char code;

  code = UnmapCommand( "Relais2On" );

  switch( code ) {
    ...
    case 'c':
      ...
      break;

  }
}    

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.