Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 13:23   #1
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию Передача части массива в качестве аргумента функции

И снова здравствуйте.
Мне необходимо передать часть массива в функцию.
Для примера предположим что есть массив символов, который содержит традиционное "Hello, world!", и мне необходимо передать функции только слово "Hello". Таким образом из массива длиной 11 символов(\0 не в счет), мне необходимо передать только 5 символов.
Как это реализовать?
Evgenuych96 вне форума Ответить с цитированием
Старый 31.01.2013, 13:31   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

может переписать эти 5 символов в другой массив...
Код:
....
arr_new[5];
for (i=0; i<5; i++) {
arr_new[i]=arr_prev[i];
}
Igor95 вне форума Ответить с цитированием
Старый 31.01.2013, 13:33   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Только исходный массив символов имеет длину 14 (вместе с '\0')
Igor95 вне форума Ответить с цитированием
Старый 31.01.2013, 13:48   #4
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Если бы это было так легко, то я не создавал бы это тему. Из массива вырезаются слова разной длины, то есть сейчас это 5 символов, а потом может быть 11 или 2, поэтому этот метод не подходит. Был правда выход -> постоянное создание нового массива внутри функции, размер которого был бы равен размеру слова. Но этот метод не соответствует ANSI стандарту, и поэтому некоторые компиляторы просто откажутся компилировать программу.
Evgenuych96 вне форума Ответить с цитированием
Старый 31.01.2013, 13:52   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Так просто ищите в Вашем массиве слово, записывайте в другой массив и передавайте (применяйте алгоритм нахождения слова).
Igor95 вне форума Ответить с цитированием
Старый 31.01.2013, 14:00   #6
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Нет тут хитрость в том, что массив должен иметь такую же длину что и само слово, то есть если слово состоит из 5 символов, то и массив должен состоять из 5 ячеек(\0 не нужно т.к. слово должно полностью заполнять размер), а т.к. для этого нужен динамически меняющий размер массив(который возможно вообще не существует как понятие), то единственный выход это передать часть массива в функцию. Жаль что нельзя сделать как в Python, передав массив в виде name[0:5](передать все символы от 0 ячейки до 5й).
Evgenuych96 вне форума Ответить с цитированием
Старый 31.01.2013, 14:14   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Динамические массивы есть:
Код:
void main() {
int *arr, d;
int N;//исходная размерность массива
arr=(int*)malloc(sizeof(int)*N);
for (i=0; i<N; i++) {
cin >> d;
arr[i]=d;
}
...
//затем, при необходимости, меняете исходный размер массива с помощью функции calloc...
}
Если честно, то я не совсем понимаю Ваше задание, если возможно, то предоставьте полное условие...
Igor95 вне форума Ответить с цитированием
Старый 31.01.2013, 14:31   #8
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Благодарю за полезную информацию. Хоть это и не совсем то, но возможно это поможет. Тогда спрошу кое что по проще:
Предположим есть массив name на 256 ячеек, который заполнен следующим образом
{'f','i','l','e','.','t','x','t','\ 0', ... "мусор" ...}
И необходимо передать этот массив в fopen, отбросив '\0' и "мусор". Если передать fopen(name,"rt"), то он примет '\0' за часть имени и будет искать файл с именем "file.txt" и кодом '\0', и не найдет его т.к. файл "file.txt" не содержит в имени '\0'.
Скажу сразу, это не какое то задание, а моя личная программа(а точнее игра), дабы вы не думали что я не хочу делать задание а прошу других.
Evgenuych96 вне форума Ответить с цитированием
Старый 31.01.2013, 14:40   #9
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

std::string не подойдёт для этой программы? По-моему, у него есть много методов, которые облегчат такие задачи.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 31.01.2013, 14:47   #10
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача функции в качестве аргумента maks12 Помощь студентам 5 10.05.2012 08:13
Имя функции в качестве аргумента Artem_Kokos Помощь студентам 1 25.04.2011 00:20
Как массив передать в качестве аргумента функции Mixim C# (си шарп) 7 10.03.2011 09:53
Передача object в качестве аргумента moknomo Microsoft Office Excel 3 14.12.2010 09:35
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57