Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.65
Siend
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 97
#1

Чтение строки неизвестной длины - C++

23.11.2011, 14:40. Просмотров 10519. Ответов 42
Метки нет (Все метки)

реализация на СИ

как прочитать строку неизвестной длины? Чтение должно быть не посимвольным. Строка вводиться вручную.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 14:40     Чтение строки неизвестной длины
Посмотрите здесь:

Заполнить двумерный массив неизвестной длины C++
Создание массива чисел неизвестной длины C++
Чтение из файла с пропуском комментария неизвестной длины C++
Как ввести строку неизвестной длины C++
C++ Ввод массива неизвестной длины
C++ Выделить память под массив неизвестной длины
Ввод динамического массива неизвестной длины C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
voral
366 / 346 / 48
Регистрация: 16.03.2008
Сообщений: 1,758
23.11.2011, 19:01     Чтение строки неизвестной длины #41
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
voral, зачем?
ЗАмена вашего условия если длина (новый индекс) кратен разберу блока (1024) то необходимо расширять
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
23.11.2011, 19:02     Чтение строки неизвестной длины #42
Цитата Сообщение от voral Посмотреть сообщение
стоп. а какая разница? не не не. Имх код первый нормальный только не учтен последний \0.
надо все ж проверить. думаю достаточно при аллоке и реалоке еще +1 сделать.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
        const int bufSize = 1024;
        long sLen = 0;//Будет содержать в себе длинну строки
        //Начальное выделение памяти всего под 1 символ
        char ch, * str = (char *)malloc((bufSize+1)*sizeof(char));
        printf("Enter string :\n");
        while((ch = getchar()) != '\n')
        {
                str[sLen] = ch;
                                ++sLen;
                if ((sLen / bufSize)==1)
                {
                        str = (char *)realloc(str,(sLen + bufSize+1)*sizeof(char));
                }
        }
        str[sLen] = '\0';
        printf("Your input : \n");
        printf("%s\n",str);
        system("pause");//Стоп-точка иначе приложение отработав сразу закроется
        return 0;
}



Т.е. заносим сивол в массив, потом увиличиваем длинну (он же индекс). Если индекс вышел на границу (т.е. уже не допустим) добавляем памяти. +1 в функциях с памятью дает резерв для \0
C++
1
2
3
4
                if ((sLen / bufSize)==1)
                {
                        str = (char *)realloc(str,(sLen + bufSize+1)*sizeof(char));
                }
У вас программа будет корректно работать только если вы один раз увеличиваете объем буфера, так как выражение sLen / bufSize)==1 будет верно только один раз.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 19:08     Чтение строки неизвестной длины
Еще ссылки по теме:

C++ Чтение строки неограниченной длины и её параллельная обработка
Чтение из файла строки неизвестной длинны C++
Массив символов неизвестной длины C++
C++ Ввод массива заранее неизвестной длины
C++ Ввод массива заранее неизвестной длины

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

Или воспользуйтесь поиском по форуму:
voral
366 / 346 / 48
Регистрация: 16.03.2008
Сообщений: 1,758
23.11.2011, 19:08     Чтение строки неизвестной длины #43
-=ЮрА=-, в целом избавились от одной переменой, и операций сложения и присваивания у меня меньше, а так же у вас дополнительное условие




Добавлено через 2 минуты
Цитата Сообщение от Сыроежка Посмотреть сообщение
У вас программа будет корректно работать только если вы один раз увеличиваете объем буфера, так как выражение sLen / bufSize)==1 будет верно только один раз.
Черт.... Эх я и .....
Yandex
Объявления
23.11.2011, 19:08     Чтение строки неизвестной длины
Ответ Создать тему
Опции темы

Текущее время: 06:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru