Fortran如何拆分中间带符号的字符串以提取二项式的两个变量
Fortran 二项式表达式变量拆分解决方案
可以直接使用Fortran内置的index()函数获取指定字符在字符串中的位置,不需要自行编写遍历逻辑,完整实现逻辑如下:
- 第一步:定位输入字符串中左右括号的位置,截取二者中间的内容,直接过滤掉外层括号和末尾的指数部分
- 第二步:在截取到的括号内字符串中查找运算符位置,优先查找
+,无匹配结果再查找- - 第三步:以运算符位置为分界,分别提取左右两侧的字母字符,作为两个变量值
可直接运行的代码示例:
program split_binomial implicit none character(100) :: input_str, inner_expr, var1, var2 integer :: pos_left_paren, pos_right_paren, pos_op integer :: i ! 可替换为实际输入的表达式 input_str = "(qwerty-asdf)^12" ! 提取括号内的有效表达式 pos_left_paren = index(input_str, '(') pos_right_paren = index(input_str, ')') inner_expr = input_str(pos_left_paren+1 : pos_right_paren-1) ! 定位运算符位置 pos_op = index(inner_expr, '+') if (pos_op == 0) then pos_op = index(inner_expr, '-') end if ! 提取第一个变量 var1 = '' do i = 1, pos_op - 1 if (inner_expr(i:i) >= 'a' .and. inner_expr(i:i) <= 'z') then var1 = trim(var1)//inner_expr(i:i) end if end do ! 提取第二个变量 var2 = '' do i = pos_op + 1, len_trim(inner_expr) if (inner_expr(i:i) >= 'a' .and. inner_expr(i:i) <= 'z') then var2 = trim(var2)//inner_expr(i:i) end if end do ! 输出验证结果 print *, "var1 = ", trim(var1) print *, "var2 = ", trim(var2) end program split_binomial
上述代码运行示例输入(qwerty-asdf)^12会输出var1 = qwerty、var2 = asdf,输入(x+y)^3会输出var1 = x、var2 = y,完全匹配需求。
内容的提问来源于stack exchange,提问作者Maximuser
相关产品推荐
相关产品推荐

