爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: 8828

[求助] Fortran编程去除字符中的空格

[复制链接]
发表于 2016-5-20 07:54:07 | 显示全部楼层
程序运行不了,看来系统有些问题
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-20 11:29:29 | 显示全部楼层
霹雳电光鼠 发表于 2016-5-19 23:22
既然是初学者,就该要知道怎么去学。我都把程序写了,你至少应该自己运行一下!!!别做都不做就上来问这么 ...

嗯,记住了,我会好好学的
但是我想知道,整体移动的时候为什会数组越界
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-20 11:43:08 | 显示全部楼层
jsdfzb 发表于 2016-5-20 07:54
程序运行不了,看来系统有些问题

不知道哪里数组越界了
密码修改失败请联系微信:mofangbao
发表于 2016-5-20 13:09:27 | 显示全部楼层
8828 发表于 2016-5-20 11:29
嗯,记住了,我会好好学的
但是我想知道,整体移动的时候为什会数组越界

你的程序就有很大的问题,没定义的变量都哪来使用,而且我还看不懂你的程序。数组越界问题出现在读入的时候,READ(*,‘(A10)’)X才是正确的,要加格式控制符。你的表控读法不会自动识别空格符,,按你的输入X=TRIM(X)的结果是  123,你后面的循环的时候超出了X的范围。我写了一个,仅供参考。

      PROGRAM qukge
      IMPLICIT NONE
      CHARACTER*10 X,Y
      INTEGER :: U = 1,I
      WRITE(*,*)'请输入带空格的字符串:'
      READ(*,'(A10)')X
      
      X=ADJUSTL(X)
      X=TRIM(X)
      
      DO I = 1,10
         IF(ICHAR(X(I:I)) /= 32)THEN
         Y(U:U) = X(I:I)
         U = U + 1
         ENDIF
     ENDDO
   
     WRITE(*,*)Y
     END
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-20 13:34:24 | 显示全部楼层
霹雳电光鼠 发表于 2016-5-20 13:09
你的程序就有很大的问题,没定义的变量都哪来使用,而且我还看不懂你的程序。数组越界问题出现在读入的时 ...

嗯,谢谢
我想的程序是遇到空格时把空格前的字符向后移动一个位置,把空格的位置用字符占掉
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-20 14:25:51 | 显示全部楼层
霹雳电光鼠 发表于 2016-5-20 13:09
你的程序就有很大的问题,没定义的变量都哪来使用,而且我还看不懂你的程序。数组越界问题出现在读入的时 ...

又看了看程序,自己编的太不认真了,重新写了一个,请帮我看一看,感谢
CHARACTER*100 WORD,X
READ(*,'(A10)')WORD
X=ADJUSTL(WORD)

DO I=2,10
IF(ICHAR(X(I:I))==32) THEN
X(2:I)=X(1:I-1)
X(1:1)=""
END IF
END DO
X=ADJUSTL(X)
PRINT*,X
END
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-20 14:53:22 | 显示全部楼层
霹雳电光鼠 发表于 2016-5-20 13:09
你的程序就有很大的问题,没定义的变量都哪来使用,而且我还看不懂你的程序。数组越界问题出现在读入的时 ...

我知道为什么数组越界了,我改了第一次记录空格数的程序,请看一下,感谢了
CHARACTER*100 X,Y*1
READ(*,'(A10)'),X
X=ADJUSTL(X)
X=TRIM(X)
U=0
DO I=2,10
Y=X(I:I)
IF (ICHAR(Y)==32)  THEN
U=U+1
X(U+1:I)=X(U:I-1)
X(U:U)=""
END IF
END DO
X=ADJUSTL(X)
PRINT*,X
END
我的错误在于if语句,条件句后面接了两个子语句,这样一定会出现数组越界,至少会出现u>i-1
而且我的空格ascll码插错了
当然,还要感谢您的教导,在做这个思路的程序时也想到过您提的思路,也想过隐含do,字符拼插,但是我的能力远远达不到要求,非常感谢您对我的批评,看完我幼稚的程序
密码修改失败请联系微信:mofangbao
发表于 2016-5-21 21:06:36 | 显示全部楼层
你用trim(adjustl())函数,就可以去除空格了,我一般用来处理文件夹路径的
密码修改失败请联系微信:mofangbao
发表于 2016-5-21 21:07:45 | 显示全部楼层
这是我处理路径的截图,括号里面的都是字符串,而且可能有空格
1.png
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2016-5-21 22:14:02 | 显示全部楼层
HSY 发表于 2016-5-21 21:07
这是我处理路径的截图,括号里面的都是字符串,而且可能有空格

但是这种情况下是不是提前知道了空格的位置呢
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表