首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从数组中执行字符串公式

是指将一个字符串公式应用于一个数组,并返回计算结果。字符串公式可以包含数学运算符(如加法、减法、乘法、除法)、括号和数组索引。

在执行字符串公式时,需要按照一定的规则解析字符串,并将其转换为可执行的代码。以下是一个可能的实现过程:

  1. 解析字符串公式:将字符串公式分解为操作数、运算符和括号。
  2. 解析数组索引:如果字符串公式包含数组索引,需要解析索引并获取相应的数组元素。
  3. 执行运算:按照运算符的优先级和结合性,依次执行运算操作。
  4. 处理括号:如果字符串公式包含括号,需要先计算括号内的表达式。
  5. 返回结果:将最终的计算结果返回。

以下是一个示例代码,用于从数组中执行字符串公式:

代码语言:python
复制
def evaluate_expression(expression, array):
    stack = []
    i = 0

    while i < len(expression):
        if expression[i].isdigit():
            num = 0
            while i < len(expression) and expression[i].isdigit():
                num = num * 10 + int(expression[i])
                i += 1
            stack.append(num)
        elif expression[i] == '[':
            stack.append('[')
            i += 1
        elif expression[i] == ']':
            sub_expression = []
            while stack[-1] != '[':
                sub_expression.append(stack.pop())
            stack.pop()  # Remove '['
            sub_expression.reverse()
            index = evaluate_expression(''.join(map(str, sub_expression)), array)
            stack.append(array[index])
            i += 1
        elif expression[i] in ['+', '-', '*', '/']:
            stack.append(expression[i])
            i += 1
        else:
            i += 1

    while len(stack) > 1:
        operator = stack.pop()
        operand2 = stack.pop()
        operand1 = stack.pop()

        if operator == '+':
            stack.append(operand1 + operand2)
        elif operator == '-':
            stack.append(operand1 - operand2)
        elif operator == '*':
            stack.append(operand1 * operand2)
        elif operator == '/':
            stack.append(operand1 / operand2)

    return stack[0]

# 示例用法
array = [1, 2, 3, 4, 5]
expression = "[(1+2)*3-4]/5"
result = evaluate_expression(expression, array)
print(result)  # 输出结果为 1.0

这个示例代码演示了如何从数组中执行字符串公式。在这个例子中,我们将字符串公式解析为操作数和运算符,并使用栈来计算最终结果。如果字符串公式包含数组索引,我们会递归地调用 evaluate_expression 函数来计算索引对应的数组元素。

这个示例代码只是一个简单的实现,实际应用中可能需要考虑更多的边界情况和错误处理。此外,根据具体的需求,可能需要对代码进行优化或修改。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel公式练习45: 矩阵数组返回满足条件的所有组合数

公式 在单元格G2数组公式为: =SUM(0+(MMULT(IFERROR(N(OFFSET(A1,IF(MMULT(0+(ISNUMBER(FIND({1,2,3,4},ROW(INDIRECT(...首先,获取传递给OFFSET函数作为参数rows的排列数组,即公式的: IF(MMULT(0+(ISNUMBER(FIND({1,2,3,4},ROW(INDIRECT("1234:4321"))))...现在,对于将在公式的IF语句中生成TRUE的24个值(1234、1243、1324等)的每一个,提取一个由这四个数字组成的数组(其每个数组为{1,2,3,4}、{1,2,4,3}、{1,3,2,4}等...数组红色数字分别对应着执行下面的公式操作: N(OFFSET(A1,{0,1,2,3},{0,1,2,3},,)) N(OFFSET(A1,{0,1,3,2},{0,1,2,3},,)) N(OFFSET...这样,公式构造的: MOD(INT((ROW(1:27)-1)/3^{2,1,0}),3) 将转换成的数组是什么呢? 实际上,我们在这里所做的就是将一系列以10为底的值转换为以3为底的值。

3.2K10

Excel公式技巧10: 字符串中提取数字——数字位于字符串开头

本文主要研究字符串开头提取数字的技术: 1. 这些数字是连续的 2. 这些连续的数字位于字符串的开头 3....其解析过程如下: ROW(INDIRECT("1:" & LEN(A1))) 生成一个由1至单元格A1字符串长度数的整数组成的单列数组: {1;2;3;4;5;6} 这样,公式1变为: =-LOOKUP...、2、3、4、5、6应用于A1字符串,即: =-LOOKUP(1,-{"1";"12";"123";"123A";"123AB";"123ABC"}) 其中的数组乘以-1,得到: =-LOOKUP(...在这里,由于在lookup_vector找不到1,公式返回数组中最后一个数值,即-123。 当然,这绝对不是处理这种公式结构的唯一方法,只要确保选择的lookup_value的值足够大。...-1) 这是一个数组公式

2.9K20

Excel公式练习48: 比较字符串的字符

本次的练习是:在单元格A2给定一个字符串值,仅由大写字母组成且字符长度至少为2。在单元格B2输入公式:如果A2字符串的各个字符按字母升序排列(从左到右),则返回TRUE;否则返回FALSE。...公式 在单元格B2公式为: =AND(GESTEP(MMULT(CODE(MID(A2,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A2)-1))+{0,1},1)),{-1;1}...公式解析 首先,让我们看一下公式的用于生成要传递给MID函数的参数的数组的结构: ROW(INDEX(A:A,1):INDEX(A:A,LEN(A2)-1)) 该构造与下面的标准结构返回相同的数组:...实际上我们可以一步生成这两个数组,而不是用这种方式生成两个单独的数组。只需要确保能够对所得到的单个数组执行我们所需的比较。...因此: {1;2;3;4;5;6;7}+{0,1} 由第二个数组的两个值与第一个数组的每个值相加,得到: {1,2;2,3;3,4;4,5;5,6;6,7;7,8} 此时,公式转换为: =AND(GESTEP

1.3K10

Excel公式:删除字符串的所有数字

标签:Excel公式,SUBSTITUTE函数 有时候,可能是由于输入的原因,也可能是由于网上直接下载的数据,数据字符串夹杂着一些数字,而我们又不想要这些数字,因此,需要从字符串删除这些数字。...例如,字符串“My2017Excel2022”删除其中的数字后,成为“MyExcel”。 使用什么公式能够达到我们的目的呢?...首先很自然想到的是SUBSTITUE函数,可以用新的字符来替换字符串的原字符。...这样,假设字符串在单元格B2,我们可以编写出下面的公式: =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE...,但基本原理很简单,就是使用SUBSTITUTE函数依次替换字符串的数字1、2、3、4、5、6、7、8、9、0。

2.8K30

Javascript eval函数名数组执行字符串函数

Javascript eval() 某些情况下,传递函数名之后,接收的不是函数而是函数名的字符串类型。...eval() 方法—用来执行字符串代表的 javascript 代码,如果传递的不是字符串的话,会直接返回传值,而非调用。...param")'); //如果param是变量; var param = 'B'; eval('test(param)'); //会查找名为param的变量,如果找不到会抛出异常 字符串数组函数名函数...默认执行一个js函数会有指定函数名,如果想同时执行多个相同函数但又不同内容的时候,需要将相应函数使用 js 的 eval() 转换为字符串函数后再执行 var arr = ['funcA(str)',...'funcB(str)']; //定义数组函数名 //遍历数组函数 for(var i=0;i《arr.length;i++){ let arrFunc = "function

6610

按出现次数少到多的顺序输出数组字符串

1)把数组没重复的字符串按原先的先后顺序打印出来 (2)把数组中有重复的字符串,按出现次数少到多的顺序打印出来,每个字符串只打印一次 思路 C++,vector按先后顺序存储数据,因此可把没重复的字符串按顺序存到...map默认是按key从小到大的顺序存放数据,所以可把有重复的数据存到map,并且以出现次数为key,以字符串为value 代码 #include #include #include using namespace std; #define len 8 // 计算某个字符串数组中出现的次数 int countInArray(string s[],...v.push_back(s[i]); } else { // 出现多次的,放到map,以次数为key,字符串为value...m[count] = s[i]; } } // 把map字符串,按出现次数少到多的顺序,加到vector map<int, string

2.5K60

按出现次数少到多的顺序输出数组字符串(纠正)

问题 有一个数组为{"Liu Yi", "Chen Er", "Zhang San", "Chen Er", "Chen Er", "Li Si", "Li Si", "Wang Wu"}, 要求: (...1)把数组没重复的字符串按原先的先后顺序打印出来 (2)把数组中有重复的字符串,按出现次数少到多的顺序打印出来,每个字符串只打印一次 思路 把字符串作为key、出现次数作为value,存到map;...再把第一个map的出现次数作为key、对应的字符串作为value,存到map<int, list 算法的时间复杂度为N。...,而不是用新生成的list li = m2[cnt]; } if(cnt > 1) { // 若重复次数n...变为n+1(这里n大于或等于1) // 要把元素n所对应的list移出,放到n+1所对应的list list oldList = m2

2.1K70

排序数组删除重复项

排序数组删除重复项(传送门) 题目: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。...不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。...(已排序),原地删除,不使用额外的数组空间。...因为排序好的数组,就意味着[0,1,0,2]这种情况的数组就不存在了。好了,回归正题。我们来分析一下答案为什么要这么写叭。 首先,前面一段,直接判断当数组长度为0的时候,则直接返回0....其次,当数组正常情况下(即数组是已经排序好了的。)。那么就需要处理多余的数组里的值。要想解这道题,最主要的是要理解数组对象的存储的数据都是对其他的数据的引用,他存储在各种常量池中。

6.2K10

双倍数组还原原数组(map)

题目 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 每个元素 值乘以 2 加入数组,然后将所有元素 随机打乱 。...给你一个数组 changed ,如果 change 是 双倍 数组,那么请你返回 original数组,否则请返回空数组。original 的元素可以以 任意 顺序返回。...示例 1: 输入:changed = [1,3,4,2,6,8] 输出:[1,3,4] 解释:一个可能的 original 数组为 [1,3,4] : - 将 1 乘以 2 ,得到 1 * 2 = 2...其他可能的原数组方案为 [4,3,1] 或者 [3,1,4] 。 示例 2: 输入:changed = [6,3,0,1] 输出:[] 解释:changed 不是一个双倍数组。...示例 3: 输入:changed = [1] 输出:[] 解释:changed 不是一个双倍数组

68020

数组字符串匹配

数组字符串匹配 题目内容 给你一个字符串数组 words ,数组的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 是其他单词的子字符串的所有单词。...如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。...“superhero” 的子字符串。...builder 第二个循环去对比字符串,如果字符串是子字符串那么一定会出现两次, 所以判断首次出现的位置和第二次出现的位置不同,就代表他是子字符串 解题代码如下: class Solution {...builder.toString().lastIndexOf(str)) list.add(str); } return list; } } 小总结: 锻炼算法能力是很需要坚持的 最初的什么都不会到现在简单题轻松解答挑战中等题

2.2K40

Excel公式技巧20: 列表返回满足多个条件的数据

图1 解决方案1: 在单元格F2输入数组公式: =INDEX(C2:C10,MATCH(MAX(IF(A2:A10=F1,B2:B10)),IF(A2:A10=F1,B2:B10),0)) 注意这里有两个...为了找到最大值在此数组的位置(而不是像方案1一样使用MATCH(MAX,…等)组合,那需要重复生成上述数组的子句),进行如下操作: 我们首先给上面数组的每个值添加一个小值。...这是必需的,因为接下来将会对该数组的值求倒数,如果不执行此操作,则数组的零将导致#DIV / 0!错误,这会在将数组传递给FREQUENCY函数时使事情更复杂。...}) 求倒数之前数组的最大值(即我们关注的值)为求倒数之后数组的最小值。...由于数组的最小值为0.2,在数组的第7个位置,因此上述公式构造的结果为: {0;0;0;0;0;0;1;0;0;0} 获得此数组后,我们只需要从列C与该数组出现的非零条目(即1)相对应的位置返回数据即可

8.5K10

VBA实用小程序60: 替换图表SERIES公式字符串

大家知道,Excel图表的每个系列使用的数据都是由SERIES公式来确定的。当我们选取图表的某个数据系列时,在公式栏中就会显示相应的SERIES公式,但这个公式不是真正的公式,不能输入到单元格。...有时,我们可能会批量修改SERIES公式,但是对于SERIES公式来说,没有内置的“查找和替换”功能。...:","输入旧字符串") If Len(OldString) > 1 Then Dim NewString As String NewString= InputBox("输入新字符串来替换掉原字符串...Dim NewFormula As String '替换SERIES公式字符串 NewFormula = WorksheetFunction.Substitute(...,vbInformation, "没有输入" End If End Sub 如下图1所示,需要将图表系列的C替换成D,运行ChangeSeriesFormula_ActiveChart过程,按照提示输入原字符串和新字符串

1.8K20
领券