对C中的字符执行算术运算

时间:2012-09-20 01:13:41

标签: c string math char int

我正在尝试编写一个添加,减少,乘以和除以字符串的程序。我现在正在使用该程序找出如何将输入字符串拆分为两个字符串,然后执行相应的+ - / *。

输入应该如下所示:abc + aaa

并且输出应为abc + aaa = bcd

如何将字符串转换为整数字符串?

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

int main() {

printf("This is a pseudo arithmetic program");

char input[10];
input[10] = '\0';
char first [9];
first[9] = '\0';
char last [9];
last[9] = '\0';

int i = 0; 
int b; 
int e;

while (input[0] != '0') {

if (input[0] == 0){
return -1;
}

printf("\nEnter a math problem in SOS format using only lowercase letters up to 9    characters");
printf("\nEx: abc+abc... type '0' to quit \n");
scanf("%s", input);

int x = 0;
x = strlen(input); 

    if (strchr(input, '+')){
    for (i = 0; i <= x; i++) {
         if (i == '+')
         strncpy(first, &input[0], i-1);
         i = 0;
    }
    for (i = x; i >= input[0]; i--) {
         if (i == '+')
         strncpy(last, &input[i], x);
         i = 0;    

    } 

     printf("%s", first);     
     printf(" + ");
     printf("%s", last);
     printf(" = %d", first + last);
    }

1 个答案:

答案 0 :(得分:0)

您的代码似乎存在多个问题:

  1. 几乎所有数组都有一个数组出界:

    char输入[10];
    input [10] ='\ 0';

  2. 如果你想用'\ 0'初始化最后一个字符,那么它应该是

    input [9] = '\0'
    

    数组索引始终从0开始。

    1. 目前尚不清楚以下几行的用途:

      while(input [0]!='0'){if(input [0] == 0){return -1; }

    2. 为字符串输入内容时,为什么提示用户输入0来结束字符串?

    3. strrchr返回搜索到的字符开始的指针。所以,你可以自己确定'+'符号的位置,两个分割字符串而不是你的while循环。请参阅strrchr man page

    4. 此外,您添加字符的想法尚不清楚。在您的示例中,您似乎正在考虑a = 1,b = 2等。在这种情况下,如果您的代码不区分大小写,那么您可以将所有输入转换为大写,然后执行(input[0] - 'A')+1转换你的字母如a,b,c为1,2,3等。

    5. 希望这些指针有所帮助。建议您再次检查问题陈述并相应地重构代码。