10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
||||||
1 | ||||||
Функция getline не считывает пробелы04.02.2012, 13:41. Показов 7231. Ответов 23
Метки нет (Все метки)
Написал код программы для вывода из файла строк, где есть двузначные цифры. Пользовался функцией getline. Но указанные в процессе работы программы строки выводятся "слипшиеся" - без пробелов.
Вот код программы:
0
|
04.02.2012, 13:41 | |
Ответы с готовыми решениями:
23
Функция getline считывает несколько строк из файла, игнорируя символ новой строки Getline() не считывает Getline не считывает строку целиком Не считывает одну строку из файла с getline() |
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
04.02.2012, 13:49 | 2 |
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 13:50 [ТС] | 3 |
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
04.02.2012, 14:00 | 4 |
Всё должно считываться, но в соответствии с if пробелы не выводятся.
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 14:01 [ТС] | 5 |
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 14:03 [ТС] | 7 |
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
||||||
04.02.2012, 15:09 [ТС] | 9 | |||||
Нужно убрать строчку с закрытием файла fout.
Добавлено через 1 час 0 минут Кто-нибудь может помочь? Уже по-разному пробовал и остановился на таком вот варианте. Но ничего не выводится.
Напомню задание: мне надо было записать в другой файл (вывести на экран) строки, где есть только двухзначные цифры. Ну в строках, естественно, не только цифры, а просто предложения любые.
0
|
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
|
||||||
04.02.2012, 15:39 | 10 | |||||
Цифры и Числа - суть разные вещи
0
|
04.02.2012, 15:53 | 11 | |||||
Когда находишь нужную строку, добавь выход из цикла while(), т.е.
Еще перед просмотром очередного символа проверь, является ли i валидным, т.е. ну будет ли выхода за пределы массива. Если i будет равно strlen(buf)-1, то в условии if(buf[i + 2] ...) будет выход за пределы массива. Еще нет смысла проверять является ли текущий символ символом '\n', т.к. getline() не записывает его в строку. Так же советую использовать фигурные скобки во всех if'ах (а так же в for'ах и while'ях). Это придает бОльшую читабельность и позволяет легко редактировать код. Например в 51 строке создается впечатление, что else относится к if'у из 44 строки, а в действительности из 45ой (хотя это скорее вопрос правильного форматирования кода)
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 15:58 [ТС] | 12 |
Том Ардер, ну вы очень легко поступили, пользуясь встроенной нестандартной функцией. А как без нее сделать?
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 16:00 [ТС] | 14 |
Стандартная функция чего? Visual studio?
И если там break поставить, то строка дальше смотреться не будет. Т.е. если встретили где-то в первом месте число 25, прервали цикл. А в той же строке дальше может идти число 325. Получается, что выведется ненужная строка.
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 16:08 [ТС] | 16 |
Хотя, в задании не сказано, что должны в строке быть только двузначные цифры. Написано, что "только те строки, где есть двузначные цифры". Значит, там могут быть и двухзначные, и трехзначные одновременно. Раз isdigit есть даже с C, то буду пользоваться ей.
0
|
04.02.2012, 17:38 | 17 | |||||
Да. Я твое замечание понял по другому, а ты мое не понял.
Смотри, в строке может быть число 325, тогда когда i будет указывать на 3, то good_str будет 0, а i увеличится на 1. При следующей итерации i будет указывать на 2, далее будет идти 5 а потом например пробел и good_str станет равным 1, как будто это двузначное число, хотя это не так. Поэтому нужно смотреть еще предыдущий символ, чтоб он не был цифрой. Добавлено через 1 час 25 минут Если компилятор с поддержкой С++11, то можно сделать так:
0
|
10 / 10 / 4
Регистрация: 03.10.2010
Сообщений: 350
|
|
04.02.2012, 17:40 [ТС] | 18 |
Kastaneda, я вообще пользовался только СИ, а это углубленный с++ какой-то. Мне ведь стандартными средствами с++ надо сделать.
0
|
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
|
||||||
04.02.2012, 17:47 | 19 | |||||
Это тоже не спасает: для цифры 5 надо смотреть уже два предыдущих символа.
Выход в другом: считать количество цифр
0
|
04.02.2012, 17:55 | 20 |
Одного предыдущего символа и двух следующих будет достаточно, т.к. если число из 3х и более цифр, то строка уже не подходит.
0
|
04.02.2012, 17:55 | |
04.02.2012, 17:55 | |
Помогаю со студенческими работами здесь
20
Некорректно считывает структуру с cin.getline Почему stream.getline считывает до пробела? Почему getline не считывает строку при первом проходе цикла? Программа не считывает пробелы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |