在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
相关产品推荐
相关产品推荐

