字符串计算

时间:2014-06-07 00:15:00

标签: c string

我特别想要制作一个只有附加功能的字符串计算器。当数字没有分开时,数字有一个整数。当输入为11时,程序可能不会执行1 + 1但必须使其成为11。

当我执行以下程序时,它在我的屏幕上打印“Sum = 111”,有人知道它为什么不打印11并且可能有解决方案吗?

int main(void)
{
int sum = Add("11");

if(sum == -1)
{
    printf("Can not return a sum");
}
else
{
    printf("Sum = %d\n", sum);
}
}

extern int Add(char* numbers)
{
size_t string_length = strlen(numbers);
int Sum = 0;
int index = 0;
char number_string[255];
int number = 0;

if(string_length == 0)
{
    Sum = 0;
    return Sum;
}
else if(string_length == 1)
{
    if(isdigit(numbers[0]))
    {
    Sum = numbers[0] - '0';
    }
    else
    {
        return -1;
    }
    return Sum;
}
else if(string_length >= 2)
{
    for(index; index <= string_length; index++)
    {
        if(isdigit(numbers[index]))
        {
            strcat(number_string, &numbers[index]);
        }
        else if(!isdigit(numbers[index]))
        {
            Sum += atoi(number_string);
            memset(number_string, 0, 255);
        }
        else
        {
            return -1;
        }
    }
    return Sum;
}
else
{
    return -1;
}
}

2 个答案:

答案 0 :(得分:1)

你的函数使用strcat,你可以调试并看看它是如何工作的:

  1. 第一次迭代 - 将字符串“11”(&amp; numbers [0]指向字符串的开头)追加到number_string
  2. 第二次迭代 - 将字符串“1”(&amp; numbers [1]指向第二个符号)追加到number_string
  3. 这就是你如何得到“111”

    您需要做的是将字符串转换为数字而不连接,如下所示:

    int Add(char* numbers) {
        int n = 0;
        for (; *numbers; numbers++)
            if (isdigit(*numbers))
                n = n*10 + (*numbers - '0');
        return n;
    }
    

答案 1 :(得分:0)

您的strcat11然后是猫1来编号字符串,所以你111。除了printf之外没有任何内置函数,这是一种简单的方法。

#include <stdio.h>

int main(int argc, char *argv[])
{
  int sum = -1;
  printf("%d\n", argc);
  if (argc == 2) {
     sum = Add(argv[1]);
  }

  if(sum == -1)
  {
      printf("Can not return a sum\n");
  }
  else
  {
      printf("Sum = %d\n", sum);
  }
}

int Add(char* numbers)
{
  char *ptr = numbers;
  char *end = numbers;
  int sum = 0;
  while (*end >= '0' && *end <= '9') {
      end++;
  }
  for( ; ptr < end; ptr++) {
    sum *= 10;
    /* *ptr is always positive */
    sum += *ptr - '0';
  }
  return sum;
}