0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 8
1

Не выводит на экран часть строки

28.03.2012, 11:45. Показов 978. Ответов 3
Метки нет (Все метки)

Добрый день,

По условию надо удалить из текста все цифры. Я просматриваю строку посимвольно, и если это не цифра, то прибавляю символ к новой строке, т.о. в новой строке цифр не будет. Почему то не обрабатывает выделенный символ из первой строки - не прибавляет к новой и при выводе на экран пустая строка. Целиком строка выводится нормально. Вот код.

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1  program sum
        character s*70,a*70
        integer i
        write(*,*)'vvedite stroky'
        read(*,'(a)')s
        write(*,'(a)')s !выводит нормально
 
               
                write(*,'(a)')s(5:5) !пустая строка на экране
                a=' '
                i=1
                do while(i.le.len(s))
                    m=ichar(s(i:i))
                    write(*,*) m !выводит нормально
                if (.not.((m.le.57).and.(m.ge.48))) then
                write(*,'(a)')char(m) !пустая строка на экране
                 a=a//char(m)
                 endif
                i=i+1
                enddo               
                write(*,'(a)')a !пустая строка на экране
              end
В чем я не прав?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2012, 11:45
Ответы с готовыми решениями:

Написать программу, которая выводит на экран первую часть таблицы кодировки символов
Написать программу, которая выводит на экран первую часть таблицы кодировки символов(символы с...

Написать программу, которая выводит на экран первую часть таблицы кодировки символов
Написать программу, которая выводит на экран первую часть таблицы кодировки символов(символы с...

Написать программу, которая выводит на экран первую часть таблицы кодировки символов
Написать программу, которая выводит на экран первую часть таблицы кодировки символов( символы...

написать программу которая выводит на экран первую часть таблицы кодировки символов (от 0 до 127)
написать программу которая выводит на экран первую часть таблицы кодировки символов (от 0 до 127)...

3
X-Factor
Эксперт Hardware
3170 / 2101 / 183
Регистрация: 16.11.2011
Сообщений: 5,840
28.03.2012, 19:56 2
Цитата Сообщение от w_J Посмотреть сообщение
В чем я не прав?
В этом
Цитата Сообщение от w_J Посмотреть сообщение
a=a//char(m)
Вы делаете операцию конкатенации --- в этом случае
Поскольку символьные строки завершаются null-символом, то при их
конкатенации (объединении) этот символ, если не принять специальных
мер, окажется внутри результирующей строки, например:
character(5) :: st1 = 'ab'c, st2 = '12'c
character(10) res
res = st1 // st2 ! Вернет ab\0 12\0
print *, ichar(res(3:3)), ichar(res(8:8)) ! 0 0
См. О.В. Бартеньев
Современный Фортран
Издание третье, дополненное и переработанное
МОСКВА «ДИАЛОГ-МИФИ» 2000

Поэтому лучше рассматривайте строку как одномерный символьный массив, и используйте простую операцию присваивания одного элемента массва (входного) другому (выходной строки).

ЗЫ Можно просто использовать два указателя (Tail и Head) и перебрасивать символы из хвоста в голову (там, где надо) на одной и той же строке. Только конец пробелами надо будет почистить (соглашения Фортрана) и null-символ дописать (для C- совместимости).
1
0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 8
28.03.2012, 22:25  [ТС] 3
да, рассмотрел как массив, все получилось, спасибо
Fortran
1
2
3
4
5
    if (.not.((m.le.57).and.(m.ge.48))) then
                
                 a(j:j)=char(m)
                 j=j+1
                 endif
0
X-Factor
Эксперт Hardware
3170 / 2101 / 183
Регистрация: 16.11.2011
Сообщений: 5,840
29.03.2012, 00:08 4
Цитата Сообщение от w_J Посмотреть сообщение
a(j:j)=char(m)
угу, вот только взаимно обратные функции
ICHAR (s(i:i)) и CHAR (m)
--- избыточны…

Оно не возбраеяется, но будьте проще…
Делайте такое присваивание ===>
a(j) = s(i)
А можно было и от строки a отказаться, коль она больше не понадобится...
s(j) = s(i)
, но тогда хвост необходимо зачистить --- я об этом выше писал.

Добавлено через 40 минут
w_J,
a(j) = s(i)
s(j) = s(i)
--- неверные утверждения

Верно ниже
a(j:j) = s(i:i)
s(j:j) = s(i:i)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2012, 00:08

Как вывести на экран часть символьной строки
Ребят, помогите сделать задание. Мне нужно было найти последнее вхождение символа в строку, я...

Вывести на экран часть строки после";" и до конца строки строка вводится с клавиатуры
задание в названии Добавлено через 6 минут срочно плиз

Вывести на экран третью по порядку пятую часть строки
Вводится строка с количеством символов кратным пяти. Например (5,10,15 и т.д) Вывести на экран...

Выводит на экран только строки не содержащие двухзначных чисел
Мне нужно написать программу которая считывает текст из файла и выводит на экран только строки не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.