|
本帖最后由 weixing1531 于 2024-6-16 13:36 编辑
例如从字符串"SetColor(255,30,58)"提取255,30,58这三个整数
方法1、方法2为Fortran方法,利用read,index
方法3、方法4为C语言方法,利用函数sscanf,strtok
[Fortran] 纯文本查看 复制代码 07 | subroutine c_sscanf ( str , ft , r , g , b ) bind ( c ) |
09 | character ( c_char ) , intent ( in ) :: str ( * ) , ft ( * ) |
13 | subroutine c_strtok ( str , ft , num , out , len ) bind ( c ) |
15 | character ( c_char ) , intent ( in ) :: str ( * ) , ft ( * ) |
17 | character ( kind = c_char ) :: out ( * ) |
23 | integer ( c_int ) :: r , g , b , lenth , num |
24 | character ( 100 ) :: temp_str |
26 | character ( : ) , allocatable :: str , sep |
28 | str = "SetColor(255,30,58)" |
30 | write ( * , "('被解析字符串:',a)" ) str |
31 | write ( * , "('间隔符:[',a,']')" ) sep |
32 | read ( str , "(a9,i3,a1,i2,a1,i2)" ) temp_str , r , temp_str , g , temp_str , b |
33 | write ( * , "('方法1:',*(i0,1x))" ) r , g , b |
36 | if ( sep == "," .or. sep == " " ) then |
40 | read ( str ( left +1 : right -1 ) , * ) r , g , b |
41 | write ( * , "('方法2:',*(i0,1x))" ) r , g , b |
45 | call c_sscanf ( str / / c_null_char , "SetColor(%d" / / sep / / "%d" / / sep / / "%d)" / / c_null_char , r , g , b ) |
46 | write ( * , "('方法3:',*(i0,1x))" ) r , g , b |
49 | call c_strtok ( str / / c_null_char , "(" / / sep / / ")" / / c_null_char , num , out , lenth ) |
50 | write ( * , "('元素个数:',i0,/'字符串长度:',i0)" ) num , lenth |
51 | write ( * , "('字符串:',a)" ) out ( 1 : lenth ) |
52 | read ( out ( 1 : lenth ) , * ) temp_str , r , g , b |
53 | write ( * , "('方法4:',*(i0,1x))" ) r , g , b |
fortran.zip
(319.08 KB, 下载次数: 0)
|
|