You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:54:00