编写代码实现2个个位数相加运算,输入是2个个位数字相加的字符串,计算运算结果。 原型:int expr(const char *str); 如:expr("1+2") 预期返回值为 3 目前已经实现了个位数字符转为整数的子功能int num(const char ch);请利用该函数实现2个个位数相加的计算。 要求:不要使用atoi、strlen等库函数
时间: 2024-02-16 19:03:45 浏览: 116
好的,这个问题我可以帮您解答。下面是代码实现:
```c++
int num(const char ch) {
return ch - '0'; // 将字符转换为数字
}
int expr(const char* str) {
int result = 0; // 用来存储计算结果
int i = 0;
while (str[i] != '+') { // 找到第一个加号前面的数字
result = result * 10 + num(str[i]);
i++;
}
i++; // 跳过加号
while (str[i] != '\0') { // 计算第二个数字并求和
result = result * 10 + num(str[i]);
i++;
}
return result;
}
```
这个函数会遍历输入字符串,找到第一个加号前面的数字并保存到 `result` 变量中,然后跳过加号,继续遍历输入字符串,计算第二个数字并将其加到 `result` 中,最后返回计算结果。需要注意的是,我们需要使用 `num` 函数将字符转换为数字。
相关问题
编写代码实现输入一个数字的字符串,返回对应整数,要求不用atoi等库函数。 原型:int expr(const char *str); 如:expr("1") 预期返回值为 1
好的,这是一个将数字字符串转化为整数的问题,以下是一种实现方法:
```c
int expr(const char *str) {
int i = 0;
int num = 0;
int sign = 1;
if (str[0] == '-') {
sign = -1;
i++;
}
while (str[i] != '\0') {
num = num * 10 + (str[i] - '0');
i++;
}
return sign * num;
}
```
这个函数的实现思路是,首先判断字符串的符号,如果是负数则记录符号,并将索引 i 加 1。然后遍历字符串中的每一个字符,将其转换为数字,并将其累加到 num 中,最后返回 num 乘以符号即可。
需要注意的是,这个函数没有对输入的字符串做任何格式检查,如果输入的字符串不是一个有效的数字字符串,可能会导致不可预料的错误。
输入一个表达式字符串,计算其结果 输入格式: 行1:输入字符串数目 下面分别输入要计算的表达式 输出格式: 输出计算结果,结果保留2位小数。对于异常数据能输出相应异常信息。
好的,您的问题是如何输入一个表达式字符串并计算其结果,我可以为您提供一个Python代码示例:
```python
import math
def postfix_eval(postfix_expr):
stack = []
for token in postfix_expr:
if token.isdigit():
stack.append(int(token))
else:
operand2 = stack.pop()
operand1 = stack.pop()
result = do_math(token, operand1, operand2)
stack.append(result)
return round(stack[0], 2)
def do_math(op, op1, op2):
if op == "+":
return op1 + op2
elif op == "-":
return op1 - op2
elif op == "*":
return op1 * op2
elif op == "/":
if op2 == 0:
raise ValueError("除数不能为0!")
return op1 / op2
elif op == "^":
return math.pow(op1, op2)
else:
raise ValueError("无效的运算符!")
def infix_to_postfix(infix_expr):
prec = {}
prec["^"] = 4
prec["*"] = 3
prec["/"] = 3
prec["+"] = 2
prec["-"] = 2
prec["("] = 1
opstack = []
postfixList = []
tokenList = infix_expr.split()
for token in tokenList:
if token.isdigit():
postfixList.append(token)
elif token == '(':
opstack.append(token)
elif token == ')':
topToken = opstack.pop()
while topToken != '(':
postfixList.append(topToken)
topToken = opstack.pop()
else:
while (len(opstack) != 0) and (prec[opstack[-1]] >= prec[token]):
postfixList.append(opstack.pop())
opstack.append(token)
while len(opstack) != 0:
postfixList.append(opstack.pop())
return postfixList
n = int(input())
for i in range(n):
expr = input()
try:
postfix_expr = infix_to_postfix(expr)
result = postfix_eval(postfix_expr)
print(result)
except ValueError as e:
print(str(e))
```
这个代码实现了将中缀表达式转换为后缀表达式,并计算后缀表达式的值。您可以通过输入多个表达式字符串来测试它。
阅读全文