2016-10-19 1 views
-1

Ich benutze zwei Dateien, die eine sendet, und die andere erhält ein Zeichen mit Pipes und es funktioniert gut, aber ich möchte wissen, wie ich nach dem Erhalt der Nachricht das Zeichen in Ganzzahlen konvertieren und hinzufügen oder subtrahieren basierend auf was ist auf dem char.Wie kann ich zwei Zahlen aus einem Zeichen in C hinzufügen?

Wie kann ich "3 + 4" in 7 parsen?

Hier ist meine write.c

#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() 
{ 
int fd; 
char * myfifo = "/tmp/myfifo"; 

/* crear FIFO */ 
mkfifo(myfifo, 0666); 

/* escribir al FIFO */ 
fd = open(myfifo, O_WRONLY); 
write(fd, "3+4", sizeof("3+4")); 
close(fd); 

/* remover FIFO */ 
unlink(myfifo); 

return 0; 
} 

Und das ist mein read.c

#include <fcntl.h> 
#include <stdio.h> 
#include <sys/stat.h> 
#include <unistd.h> 

#define MAX_BUF 1024 

int main() 
{ 
int fd; 
char * myfifo = "/tmp/myfifo"; 
char buf[MAX_BUF]; 

/* open, read, and display the message from the FIFO */ 
fd = open(myfifo, O_RDONLY); 
read(fd, buf, MAX_BUF); 
printf("Received: %s\n", buf); 
close(fd); 

return 0; 
} 
+1

Ich vermute, es ist nicht wirklich gut, solange Sie 'write (fd," 3 + 4 ", sizeof (" 3 + 4 "));' statt 'write (...., strlen (" 3 + 4 "));' –

+0

Bitte formatieren/einrücken Sie Ihren Code. –

+0

und zeigen Sie uns, was Sie bis jetzt versucht haben, die Nachricht zu analysieren, die Sie erhalten haben –

Antwort

1

wenn dies nur über das Hinzufügen von 2 Zahlen (Arsch zu einem Allzweck-Rechner im Gegensatz), warum nicht Senden Sie einfach "3,4"

Jetzt teilen Sie die Zeichenfolge an der ",". Tipp - Verwenden Sie strchr

Konvertieren Sie jetzt die zwei Teilstrings in Ganzzahlen. Tipp verwenden Sie atol

Jetzt fügen Sie sie hinzu. Hinweis Verwendung +

0

Sie müssen die Zeichenfolge analysieren, um die arithmetischen Ausdrücke zu erhalten. Wie die Kommentatoren bereits sagten: Eine solche Frage ist hier ein bisschen zu weit, weil es viele Möglichkeiten gibt, je nachdem, wie komplex die Ausdrücke sein können. Für eine einfache Addition/Subtraktion von zwei positiven ganzen Zahlen - nicht mehr als s1 + s2 oder s1 - s2, keine Negationen oder irgendetwas anderes - können Sie dieses sehr einfache Beispiel verwenden:

#include <stdio.h> 
#include <stdlib.h> 

// ALL CHECKS OMMITTED! 

#define ADD 1 
#define SUB 2 

int parse(char *s) 
{ 
    int op1 = 0, op2 = 0, res = 0, operator= 0, next = 0; 
    for (;;) { 
    switch (*s) { 
     case '0': 
     case '1': 
     case '2': 
     case '3': 
     case '4': 
     case '5': 
     case '6': 
     case '7': 
     case '8': 
     case '9': 
     // may over/underflow, check! 
     if (next == 0) { 
      op1 *= 10; 
      op1 += *s - '0'; 
     } else if (next == 1) { 
      op2 *= 10; 
      op2 += *s - '0'; 
     } 
     break; 
     case '+': 
     operator = ADD; 
     next = 1; 
     break; 
     case '-': 
     operator = SUB; 
     next = 1; 
     break; 
     case '\0': 
     // may over/underflow, check! 
     if (operator == ADD) { 
      res = op1 + op2; 
     } else if (operator == SUB) { 
      res = op1 - op2; 
     } 
     break; 
     default: 
     // just ignore everything else for now 
     break; 
    } 
    if(*s == '\0'){ 
     break; 
    } 
    s++; 
    } 
    return res; 
} 

int main() 
{ 
    char *s = "3 + 4"; 
    printf("%s = %d\n",s, parse(s)); 
    s = "3 - 4"; 
    printf("%s = %d\n",s, parse(s)); 
    exit(EXIT_SUCCESS); 
} 

Und obwohl es sind sehr Einfach und von wenig Nutzen ist es schon ziemlich komplex. Sie können es erweitern - bis zu einem gewissen Grad - aber Sie werden ziemlich schnell eine Grenze erreichen.

Wenn Sie nicht mehr als eine Reihe von arithmetischen Operationen haben, können Sie sich etwas Zeit nehmen, Dinge wie z. B .: "parse infix expressions" oder ähnliches hier und anderswo nachzuschlagen. Der erste Hit bei Google ist die Wikipedia-Seite über die Shunting-Yard algorithm, die Ihnen einen guten Start geben sollte. Es ist ziemlich interessant, aber nichts für einen halben Abend zu lernen.

Verwandte Themen