首页 > 解决方案 > C程序将字符指令从文本文件转换为字符串指令

问题描述

我的输入文本文件目前看起来像这样

a 5 
a 10
s 8
r

结果是= 49 (5+10-8*2)

但它应该看起来像这样:

ADD 5 
ADD 10
SUB 10
SQR

我的问题是,如何将字符指令转换为字符串指令?

我的代码:

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


int main(int argc, char **argv)
{

FILE *fp;
char buff[255];
char numBuff[10];

int a;
int val = 0;
int len;

fp = fopen(argv[1], "r");


while(fgets(buff, 255, fp) != NULL){
  len = strlen(buff);
  strncpy (numBuff, buff+2, len-2);
  numBuff[len-2] = '\0';

  a = atoi(numBuff);

// Char Operations
  if(buff[0] == 's'){       //Subtract
      val -= a;
  }else if(buff[0]=='a'){   //Add
      val += a;
  }else if(buff[0]=='m'){  //Multiplicate
      val *= a;
  }else if(buff[0]=='d'){  // Divide
      val /= a;
  }else if(buff[0]=='r'){  //Power*2
      val = pow(val,2);
  }

}

printf("%d \n",val);
return 0;


}


在此先感谢并抱歉格式错误,这是我在这里的第一个问题!

标签: cstringmathlineoperation

解决方案


strcmp是解决方案。但是你必须比较正确的事情。

首先获取文件中写入的操作:

strcpy(operation, buff, 3);

然后你可以在strcmp中使用它。更好的是,使用 strncmp:

if(strncmp(operation, "ADD", 3) == 0)
{
    // Do things
}

所以在你的代码中:

int main(int argc, char **argv)
{

FILE *fp;
char buff[255];
char numBuff[10];
char operation[3];

int a;
int val = 0;
int len;

fp = fopen(argv[1], "r");


while(fgets(buff, 255, fp) != NULL){
  len = strlen(buff);
  strncpy (numBuff, buff+2, len-2);
  numBuff[len-2] = '\0';

  // Get the operation
  strcpy(operation, buff, 3);

  a = atoi(numBuff);

// Char Operations
  if(strncmp(operation, "SUB", 3) == 0){       //Subtract
      val -= a;
  }else if(strncmp(operation, "ADD", 3) == 0){   //Add
      val += a;
  }else if(strncmp(operation, "MUL", 3) == 0){  //Multiplicate
      val *= a;
  }else if(strncmp(operation, "DIV", 3) == 0){  // Divide
      val /= a;
  }else if(strncmp(operation, "SQR", 3) == 0){  //Power*2
      val = pow(val,2);
  }

}

printf("%d \n",val);
return 0;


}

推荐阅读