Skip to content

Fortran2008字符串操作

在 Fortran 2008 中,字符串拼接(String Concatenation)主要通过 // 操作符 实现,同时也支持 动态字符串处理格式化拼接。以下是详细的方法说明和代码示例,包含关键注释。


1. 基本字符串拼接(// 操作符)

代码示例

program basic_concat
    implicit none
    character(len=10) :: str1 = "Hello"
    character(len=6)  :: str2 = "World"
    character(len=20) :: result

    ! 使用 // 拼接字符串
    result = str1 // " " // str2  ! "Hello World"

    print *, "Concatenated: ", trim(result)  ! trim 去除尾部空格
end program basic_concat

关键点说明

代码部分 说明
str1 // str2 拼接两个字符串
trim(result) 移除结果字符串的尾部空格(character(len=20) 会填充空格)

2. 动态调整字符串长度(adjustltrim

Fortran 的字符串是固定长度的,拼接时需注意长度分配。

代码示例

program dynamic_adjust
    implicit none
    character(len=:), allocatable :: dynamic_str  ! 可分配字符串
    character(len=10) :: str1 = "Hello"
    character(len=6)  :: str2 = "Fortran"

    ! 动态分配足够空间
    dynamic_str = trim(str1) // " " // trim(str2)  ! 自动分配长度

    print *, "Dynamic String: ", dynamic_str
end program dynamic_adjust

关键参数说明

代码部分 说明
character(len=:), allocatable 声明可分配字符串(长度运行时确定)
trim(str1) 去除尾部空格避免多余填充

3. 格式化拼接(write 到内部文件)

适用于需要控制格式的复杂拼接(如数字转字符串后拼接)。

代码示例

program formatted_concat
    implicit none
    integer :: age = 30
    real    :: height = 1.75
    character(len=50) :: info

    ! 将数值和字符串格式化拼接
    write(info, '(A, I2, A, F4.2, A)') "Age: ", age, ", Height: ", height, " meters"

    print *, trim(info)  ! 输出: "Age: 30, Height: 1.75 meters"
end program formatted_concat

格式描述符说明

格式符 作用
A 字符串
I2 2位宽整数
F4.2 4位宽浮点数(2位小数)

4. 字符串数组拼接(do 循环或 implied do

代码示例

program array_concat
    implicit none
    character(len=10), dimension(3) :: words = ["Fortran ", "is    ", "awesome"]
    character(len=50) :: sentence
    integer :: i

    ! 方法1: 使用循环拼接
    sentence = ""
    do i = 1, 3
        sentence = trim(sentence) // " " // trim(words(i))
    end do
    print *, "Loop Result: ", trim(sentence)

    ! 方法2: 使用隐式循环(需提前分配足够空间)
    write(sentence, *) (trim(words(i)), " ", i=1, 3)
    print *, "Implied DO Result: ", adjustl(sentence)  ! 左对齐
end program array_concat

关键操作

代码部分 说明
trim(words(i)) 去除每个单词的尾部空格
adjustl(sentence) 左对齐结果字符串

5. 处理长字符串(避免截断)

如果拼接结果可能超出现有字符串长度,需预先分配足够空间。

代码示例

program long_string
    implicit none
    character(len=:), allocatable :: long_str
    character(len=5) :: part1 = "Hello"
    character(len=7) :: part2 = "Fortran"

    ! 分配足够空间(手动计算长度)
    allocate(character(len=len_trim(part1) + len_trim(part2) + 1) :: long_str)
    long_str = trim(part1) // " " // trim(part2)

    print *, "Long String: ", long_str
    deallocate(long_str)
end program long_string

关键函数

函数 说明
len_trim(str) 返回字符串有效长度(不含尾部空格)
allocate(character(len=N)) 动态分配长度为 N 的字符串

总结

场景 方法 示例
简单拼接 // 操作符 str1 // str2
动态长度 可分配字符串 character(len=:), allocatable
格式化拼接 write 内部文件 write(str, '(A,I2)') "Age: ", age
数组合并 循环或隐式循环 (trim(words(i)), i=1, 3)
避免截断 预分配空间 allocate(character(len=N))

通过合理选择方法,可以高效处理 Fortran 中的字符串拼接需求!