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

在Fortran中如何从一个字符串内删除指定的子字符串?

Fortran 90 移除指定子串实现方案

核心逻辑依赖Fortran 90标准内置的index()函数定位子串位置,再拼接前后剩余内容即可,完全适配Visual Studio开发环境,无第三方依赖。

单匹配场景实现(适配你给出的示例)

你的示例中子串仅出现在原字符串末尾,直接用下方代码即可拿到预期结果:

program remove_specified_substr
    implicit none
    ! 定义字符串长度可根据实际需求调整,256足够覆盖绝大多数文件路径场景
    character(len=256) :: string1, string2, res
    integer :: sub_pos, sub_len

    ! 初始化示例参数
    string1 = 'c/test/run1/runfile.dat'
    string2 = 'runfile.dat'
    sub_len = len_trim(string2)

    ! 定位子串首次出现的起始下标
    sub_pos = index(trim(string1), trim(string2))

    if (sub_pos == 0) then
        ! 未匹配到子串直接返回原字符串
        res = trim(string1)
    else
        ! 截取子串前后的内容拼接成结果
        res = string1(1:sub_pos - 1)//trim(adjustl(string1(sub_pos + sub_len:)))
    end if

    ! 示例输出为:c/test/run1/
    write(*,*) trim(res)
end program remove_specified_substr

Visual Studio环境运行说明

  • 直接在VS的Fortran项目中创建源代码文件粘贴上述代码即可编译运行,所有用到的函数均为Fortran 90标准内置,不需要额外配置编译参数。
  • 如果需要处理超长字符串,修改character(len=xxx)中的长度参数即可。

扩展:移除所有匹配的子串

如果需要删除原字符串中所有出现的指定子串,可封装为通用函数循环处理:

function remove_all_substr(input_str, substr) result(output_str)
    implicit none
    character(len=*), intent(in) :: input_str, substr
    character(len=len(input_str)) :: output_str
    integer :: sub_pos, sub_len

    output_str = input_str
    sub_len = len_trim(substr)
    ! 子串为空直接返回原字符串
    if (sub_len == 0) return

    do
        ! 循环查找子串位置,找不到就退出
        sub_pos = index(trim(output_str), trim(substr))
        if (sub_pos == 0) exit
        ! 拼接删除子串后的内容
        output_str = output_str(1:sub_pos - 1)//trim(adjustl(output_str(sub_pos + sub_len:)))
    end do
end function remove_all_substr

内容的提问来源于stack exchange,提问作者Sahila Beegum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:04