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. 动态调整字符串长度(adjustl 和 trim)
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 中的字符串拼接需求!