如何区分C字符中的单个数字和多个数字?

问题描述 投票:0回答:1

因此,我正在从stdin中读取输入,因此必须从中计算算术。例如,可能会给我:

3+4
4+3
7+9

然后将其放入像这样的char数组中:

{3+4;4+3;7+9}

我想创建一个将接受此输入并返回的程序:

{7;7;16}

由于这是C语言中的stdin,所以每个元素都是char类型。我创建了以下代码来处理类似的数组并返回正确的结果:

char *int2string(int i, char *s)
{
    sprintf(s, "%d", i);
    return s;
}

        bufferlen = strlen(buffer);
        int result;
        for (i = 0; i < bufferlen; i++)
        {
            if (isNumeric(buffer[i]))
            {
                value1 = atoi(&buffer[i]);
                if (buffer[i + 1] == '+')
                {
                    if (isNumeric(buffer[i + 2]))
                    {
                        value2 = atoi(&buffer[i + 2]);
                        result = value1 + value2;
                        printf("This is the result: %d\n", result);
                        int2string(result, &buffer[i]);
                        for (int k = i + 1; k < bufferlen; k++)
                        {
                            buffer[k] = buffer[k + 2];
                        }
                        //bufferlen = bufferlen - 2;
                    }
                }
            }
        }

[不幸的是,我的代码仅适用于由一个字符组成的输入,并且返回的值仅为一个字符。如果要运行此命令:

34+22

我的代码返回以下内容:

This is the result: 26
322;

我相信这是因为我的代码一次只能读取一个字符,并且无法区分一位数字和包含一个以上数字的数字。有什么办法可以解决这个问题?

c arrays char int arithmetic-expressions
1个回答
0
投票

您可以使用sscanf来获取运算符和任意数字。您可以按如下方式使用它:

int sum;
sscanf(buffer, "%d", &sum);

int number;
char op;

while(sscanf(buffer, "%c%d", &op, &number) == 2) // while you can scan both operation and number
{
    if (op == '+')
        sum += number;
    else if (op == '-')
        sum -= number;
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.