Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как задавать массив символов без размера?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
goga0881



Зарегистрирован: 14.04.2005
Сообщения: 21

СообщениеДобавлено: Пт Апр 15 2005 20:15    Заголовок сообщения: Как задавать массив символов без размера? Ответить с цитатой

Всем привет. Я хочу написать прогу, которая будет выдавать самую длинную строчку, которая будет хранится в массиве символов
char longest[]. Проблема в том, что я не могу обявить массив не указав его размер. А задача заключается в том, чтобы длина массива определялась в соответствии с длиной введенной строки.

Короче я не могу обявить char longest[], надо обязательно указать его длину, точнее размерность. Как это сделать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Пт Апр 15 2005 22:04    Заголовок сообщения: Ответить с цитатой

использовать с++
vector< char >
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
goga0881



Зарегистрирован: 14.04.2005
Сообщения: 21

СообщениеДобавлено: Сб Апр 16 2005 19:17    Заголовок сообщения: Re: Как задавать массив символов без размера? Ответить с цитатой

goga0881 писал(а):
Всем привет. Я хочу написать прогу, которая будет выдавать самую длинную строчку, которая будет хранится в массиве символов
char longest[]. Проблема в том, что я не могу обявить массив не указав его размер. А задача заключается в том, чтобы длина массива определялась в соответствии с длиной введенной строки.

Короче я не могу обявить char longest[], надо обязательно указать его длину, точнее размерность. Как это сделать?


А как все это реализовать в языке С? Это задача приводится в книге Кернигана и Ритчи. Наверное есть возможность.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Сб Апр 16 2005 22:25    Заголовок сообщения: Ответить с цитатой

используй указатели, и функции malloc & realloc
это для с
но паочему не с++?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Artur



Зарегистрирован: 18.01.2005
Сообщения: 13

СообщениеДобавлено: Сб Апр 16 2005 22:32    Заголовок сообщения: Ответить с цитатой

Это очень просто char longest[strlen( тут твоя строка)]
не забудь в верху "инклюды":
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
Да и ещё твоя строка должна уже быть. Как ты собыраешься вводить строку? Если с клавы то тебе нужны будут дополнительные функции чтения буфера клавы!
Да и ещё, ты так только отведешь массив, тебе ещё надо будет туда свою строку скопировать и для этого тоже будут нужны дополнительные функции.
Удачи!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kitaro



Зарегистрирован: 16.01.2005
Сообщения: 9

СообщениеДобавлено: Вс Апр 17 2005 06:13    Заголовок сообщения: Re: Как задавать массив символов без размера? Ответить с цитатой

goga0881 писал(а):
Всем привет. Я хочу написать прогу, которая будет выдавать самую длинную строчку, которая будет хранится в массиве символов
char longest[]. Проблема в том, что я не могу обявить массив не указав его размер. А задача заключается в том, чтобы длина массива определялась в соответствии с длиной введенной строки.

Короче я не могу обявить char longest[], надо обязательно указать его длину, точнее размерность. Как это сделать?


Могу предложить способ не требующий ничего кроме большой памети
char longest[10000].
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Вс Апр 17 2005 14:50    Заголовок сообщения: Ответить с цитатой

Посмотрел задачку. Хорошая задачка.

По умолчанию создается массив в 1000 символов.
Затем мы читаем в него не более 1000 символов.
Предлагается написать код, который бы обрабатывал случай, когда мы прочли ровно 1000 символов, а строка на этом не закончилась. То есть нужно динамически выделить еще памяти, скопировать туда уже прочитанный кусок строки и продолжить чтение.

Проблема в том, что эта задачка расположена в самом начале книги и ни о каких malloc'ах речи еще не идет.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kitaro



Зарегистрирован: 16.01.2005
Сообщения: 9

СообщениеДобавлено: Вс Апр 17 2005 16:23    Заголовок сообщения: Re: Как задавать массив символов без размера? Ответить с цитатой

goga0881 писал(а):


Короче я не могу обявить char longest[], надо обязательно указать его длину, точнее размерность. Как это сделать?


вот ещё способ :
char * buff;
buff=getline(); // возможна другая ф-ия смотря откуда читаешь

int i=0;

while (buff[i]!='\0')
{

i++;

}

так узнаешь длину текущей строки а далее ....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Пн Апр 18 2005 10:46    Заголовок сообщения: не надо путать божий дар с яичницей Ответить с цитатой

Aragaer писал(а):
Посмотрел задачку. Хорошая задачка.
Проблема в том, что эта задачка расположена в самом начале книги и ни о каких malloc'ах речи еще не идет.

разные аллоки -- это не элемент языка, а просто библиотечные функции. поэтому их использование допустимо хучь в начале, хучь в конце. от этого логика изложения не нарушается
---------------------
не надо путать божий дар с яичницей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Destructor



Зарегистрирован: 28.01.2005
Сообщения: 6

СообщениеДобавлено: Пн Апр 18 2005 13:38    Заголовок сообщения: Ответить с цитатой

Цитата:

char * buff;
buff=getline(); // возможна другая ф-ия смотря откуда читаешь

int i=0;

while (buff[i]!='\0')
{

i++;

}


Этот код работать не будет...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kitaro



Зарегистрирован: 16.01.2005
Сообщения: 9

СообщениеДобавлено: Ср Апр 20 2005 18:31    Заголовок сообщения: Ответить с цитатой

Destructor писал(а):



Этот код работать не будет...


...Заодно , PLZ , скажи в чем ошибка.
getline это чисто символическая точка ввода строки.

Rgrds & Thnks
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Чт Апр 21 2005 00:32    Заголовок сообщения: Ответить с цитатой

Функция getline() возвращает количество считанных символов, а вовсе не указатель на прочитанную строчку. При попытке обращения к элементам такого "массива" произойдет, почти наверняка, segmentation fault.

критикан писал(а):
разные аллоки -- это не элемент языка, а просто библиотечные функции. поэтому их использование допустимо хучь в начале, хучь в конце. от этого логика изложения не нарушается

Указатели являются элементом языка, а в них нужно ориентироваться, чтобы пользоваться этими библиотечными функциями. Первое упоминание об указателях появляется где-то через 80 страниц. Задача находится в самой первой - обзорной главе. В частности здесь есть простая операция copy, вместо которой можно было бы воспользоваться библиотечной strcpy, но для простоты понимания из библиотек подключается только stdio.h, из которой берутся только функции printf() и getchar().
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andrey Grigoriev



Зарегистрирован: 24.06.2004
Сообщения: 17
Откуда: Орел, Россия

СообщениеДобавлено: Сб Апр 23 2005 12:17    Заголовок сообщения: Ответить с цитатой

Artur писал(а):
Это очень просто char longest[strlen( тут твоя строка)]

Такой код проглотит только гнутый компилятор.

Выделять память через malloc - самый правильный метод. Главное не забыть ее потом освободить Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NewFork



Зарегистрирован: 28.02.2005
Сообщения: 73

СообщениеДобавлено: Пт Май 13 2005 06:34    Заголовок сообщения: Ответить с цитатой

Два самых простых варианта....

Код:

#include <strings.h>// Точно не помню, но помоему здесь этот тип описан
AnsiString Variable

Не нужно ни выделять память, не освобождать, строка имеет длину до 4ГБ помоему должно хватить по самые уши...

Ну и с динамическими массивами...
Код:

char*Variable;
Variable=new char[n]
...
что-то делаем...
...
delete Variable

n совершенно любое число
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DmitryShm



Зарегистрирован: 17.11.2003
Сообщения: 211
Откуда: Казань

СообщениеДобавлено: Пт Май 13 2005 14:04    Заголовок сообщения: а можно и еще.. Ответить с цитатой

А еще можно замутить использования SmartPointers, и для твоего массива сделать счетчик ссылок. Very Happy
_________________
love IT
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...