2011-10-20 4 views
0

J'ai une variable String qui aura un maximum de 80 caractères. Je déclare une variable sous la forme CHARACTER STRING*80 ou CHARACTER*80 STRING Si l'utilisateur saisit moins de 80 caractères, certains caractères spéciaux sont ajoutés dans la position restante.comment gérer ce genre de déclarations?

Pourriez-vous s'il vous plaît laissez-moi savoir comment gérer ??

CLARIFICATION: Je voudrais savoir comment remplir l'espace restant dans la chaîne avec d'autres caractères.

+0

s'il vous plaît utilisez la balise de code – tekknolagi

+0

et s'il vous plaît préciser que vous souhaitez remplir l'espace restant dans la chaîne, '80 strlen (string)' avec un certain caractère – tekknolagi

Répondre

2

Pré-définir votre chaîne avec une chaîne vide, pour le remplir avec des espaces. Et ensuite, utilisez trim pour obtenir uniquement la chaîne sans espaces de fin. Vous devez également utiliser le caractère (len = 80) dans la déclaration.

Modifier, Mise à jour: Vous pouvez remplacer les espaces de fin de la chaîne avec un autre caractère avec quelque chose comme

do i=len_trim(string)+1,len(string) 
    string(i:i) = 'A' 
end do 
+1

erreur petite, déclaration correcte est le caractère (len = 80). len = peut être omis. –

+0

Ups désolé, merci pour la correction. – haraldkl

0

Vous pouvez définir une chaîne de 80 caractères de votre choix (par exemple, des espaces) et obtenir caractère d'entrée par caractère, laissant ainsi tous les éléments intacts:

[' ', ' ', ' ' ... ' ']

['h', ' ', ' ' ... ' ']

['h', 'e', ' ' ... ' ']

['h', 'e', 'l' ... ' ']

2

Je ne comprends pas « Si l'utilisateur entre moins de 80 caractères, alors certains caractères spéciaux sont en position s'annexe'es reste. » - La méthode Fortran consiste à ajouter des blancs pour remplir une chaîne sur IO ou une affectation. Vous pouvez le voir avec le programme de test suivant. Il inclut également la méthode montrée par haraldkl pour changer les espaces de fin à un autre caractère. Un problème est qu'il est difficile de faire la distinction entre les espaces de fin "réels" et ceux qui sont remplis.

module subs 

contains 

    subroutine write_string (string) 

    character (len=10), intent (in) :: string 
    integer :: i 

    write (*, '(">", A10, "<")') string 

    do i=1, 10 
     write (*, *) i, ichar (string (i:i)) 
    end do 

    return 

end subroutine write_string 

end module subs 


program test_string 

use subs 

character (len=10) :: string 
integer :: i 


! Assignment test 

string = "abc" 

call write_string (string) 


! Read test 
string = "123456789" 

write (*, '("Input string:")') 
read (*, '(A)') string 

call write_string (string) 



! replacing the trailing blanks: 

do i=len_trim (string)+1, 10 
    string(i:i) = "+" 
end do 

call write_string (string) 

stop 
end program test_string