2014-11-13 2 views
1

Я столкнулся с проблемой заполнения массива символьных строк. Проблема возникает при использовании объявления [] для назначения элементам в массиве. Когда я назначаю элемент массива my element, все в порядке.Fortran Array of Strings

Это выход

Expected Output: redgreenyellowblue 
Actual output: redgreyelblue 

Вот код

Character (len=*), Intent(in), Optional :: a2,  & 
          a3, a4, a5, a6, a7, a8 

Character (len=65), Allocatable :: str(:) 
Character (len=65) :: b(512) 

a1 = "red" 
a2 = "green" 
a3 = "yellow" 
a4 = "blue" 
a5 = "magenta" 
a6 = "cyan" 
a7 = "white" 

Allocate (str(7)) 

str = [a1, a2, a3, a4, a5, a6, a7] 

str(4) = a4 
str(5) = a5 
str(6) = a6 
str(7) = a7 

Write (*,*) "Expected output: ", Trim(a1), Trim(a2), Trim(a3), Trim(a4) 
Write (*,*) "Actual output: ", Trim(str(1)), Trim(str(2)), Trim(str(3)), Trim(str(4)) 

Я сообразуйтесь, что следующие работы, как и ожидалось

Character (len=65), Allocatable :: str(:) 
Character (len=65) :: a1, a2, a3, a4, a5, a6, a7 

a1 = "red" ; a2 = "green"; a3 = "yellow"; a4 = "blue" 
a5 = "magenta"; a6 = "cyan"; a7 ="white" 

Allocate (str(7)) 
str = [a1,a2,a3,a4,a5,a6,a7] 
Write (*,*) Trim(a1), Trim(a2), Trim(a3), Trim(a4), Trim(a5) 
Write (*,*) Trim(str(1)), Trim(str(2)), Trim(str(3)), Trim(str(4)), Trim(str(5)) 
Deallocate (str) 

Решение состоит в том, чтобы включить длину символов параметр в конструкторе

str = [Character(len=65) :: a1,a2,a3,a4,a5,a6,a7] 
+0

Во-первых, в чем проблема? Вы получаете ошибку компилятора? Если да, сообщите об ошибке. Если вы просто получите выход мусора, укажите, какой результат вы получите. Во-вторых, я уверен, что нотация '[]' недействительна. Fortran (если только он не соответствует одному из более новых стандартов) ... – SethMMorton

+0

Вы имели в виду что-то вроде '(/ a1, a2, a3, a4, a5, a6 , a7 /) '? – SethMMorton

+0

Ошибка компилятора. Однако, когда я выводя элементы массива, они усекаются. Когда я назначаю каждый отдельно, все работает нормально. Я использую gfortran 4.9, декларация [] должна работать. Например, он работает с целыми числами и действиями. – Zeus

ответ

1

Решение состоит в том, чтобы включить параметр длины символов в конструктора массива

str = [Character(len=65) :: a1,a2,a3,a4,a5,a6,a7]