如何从C中的字符中添加两个数字?

如何从C中的字符中添加两个数字?,c,char,int,pipe,fifo,C,Char,Int,Pipe,Fifo,我使用了两个文件,一个是发送,另一个是接收一个字符,使用管道,它工作正常,但我想知道在收到消息后,如何将该字符转换为整数,并根据字符上的内容进行加法或减法 基本上,我如何将“3+4”解析为7 这是我的信 #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> int main() { int fd; char * myfifo = "/

我使用了两个文件,一个是发送,另一个是接收一个字符,使用管道,它工作正常,但我想知道在收到消息后,如何将该字符转换为整数,并根据字符上的内容进行加法或减法

基本上,我如何将“3+4”解析为7

这是我的信

#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;
}
#包括
#包括
#包括
#包括
int main()
{
int-fd;
char*myfifo=“/tmp/myfifo”;
/*crear FIFO*/
mkfifo(myfifo,0666);
/*自述*/
fd=打开(仅限myfifo、O_);
写入(fd,“3+4”,大小(“3+4”);
关闭(fd);
/*清除器FIFO*/
取消链接(myfifo);
返回0;
}
这是我的读物

#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;
}
#包括
#包括
#包括
#包括
#定义最大值为1024
int main()
{
int-fd;
char*myfifo=“/tmp/myfifo”;
char buf[MAX_buf];
/*打开、读取并显示来自FIFO的信息*/
fd=打开(仅限myfifo、Ordu);
读取(fd、buf、MAX_buf);
printf(“收到:%s\n”,buf);
关闭(fd);
返回0;
}

如果这只是关于添加2个数字(ass与通用计算器相反),为什么不发送“3,4”呢

现在在“,”处拆分字符串。提示-使用strchr

现在将两个子字符串转换为整数。提示使用atol


现在添加它们。提示使用
+

您必须解析字符串以获得算术表达式。正如评论者已经说过的:这样的问题在这里有点过于宽泛,因为有很多方法可以做到这一点,这取决于表达式的复杂程度。对于两个正整数的简单加法/减法-不超过
s1+s2
s1-s2
,不求反或任何其他-可以使用以下非常简单的示例:

#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);
}
#包括
#包括
//所有支票都兑现了!
#定义添加1
#定义子2
int解析(char*s)
{
int op1=0,op2=0,res=0,operator=0,next=0;
对于(;;){
开关(*s){
案例“0”:
案例“1”:
案例“2”:
案例“3”:
案例“4”:
案例“5”:
案例“6”:
案例“7”:
案例“8”:
案例“9”:
//可能会溢出/下溢,请检查!
如果(下一个==0){
op1*=10;
op1+=*s-'0';
}else if(next==1){
op2*=10;
op2+=*s-'0';
}
打破
格“+”:
运算符=添加;
next=1;
打破
案例'-':
操作员=子;
next=1;
打破
案例“\0”:
//可能会溢出/下溢,请检查!
if(运算符==ADD){
res=op1+op2;
}else if(运算符==SUB){
res=op1-op2;
}
打破
违约:
//现在就不管其他的事情
打破
}
如果(*s=='\0'){
打破
}
s++;
}
返回res;
}
int main()
{
char*s=“3+4”;
printf(“%s=%d\n”,s,解析);
s=“3-4”;
printf(“%s=%d\n”,s,解析);
退出(退出成功);
}
虽然它非常简单,没有多大用处,但它已经相当复杂了。你可以把它扩展到某种程度,但很快就会达到极限


如果您只有一行算术运算,那么您可能需要一些时间来查找诸如“解析中缀表达式”之类的内容。谷歌的第一个热门网站是维基百科页面,该页面将为你提供一个良好的开端。这是很有趣的东西,但只花了半个晚上就没什么可学的。

我怀疑只要你调用
write(fd,“3+4”,sizeof(“3+4”)而不是
写入(..,strlen(“3+4”)请格式化/缩进您的代码。@IngoLeonhardt相反,在这种情况下使用
sizeof()
的优点是在计数中包含空终止符的空间,这可能(有时)正是所需要的。特别要注意的是,字符串文字表示数组,而不是指针,因此
sizeof()
会报告元素的数量。这里应该没有问题。从/到文件的字符串读取和写入似乎与OP的目标无关,OP的目标是:如何将
“3+4”
解析为
7
@monitorboy,您似乎在问如何将输入解析为表达式,然后计算结果表达式。这样一个问题太宽泛了。如果你想问一些更具体的问题,那么现在是编辑你的问题的好时机。