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

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

Войти
Регистрация
Восстановить пароль
 
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
#1

Передача динамического массива строк в функцию и работа с ним - C++

20.02.2013, 18:05. Просмотров 836. Ответов 12
Метки нет (Все метки)

Доброго времени суток. Помогите, пожалуйста. Мне нужно в программе объявить динамический массив строк, затем в пользовательской функции его заполнять.
У меня вот такие куски кода, связанные с этим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Function_start
void cropsentence(char *s, char *p) //p - требуемый массив
{
...
for (int i = 0; i <= 2; i++) 
p[i]=temp;
...   
}
}
//Function_end
 
int main(int argc, char* argv[])
{
......
char *p;  //вот объявление самого массива в программе. Но мне надо сделать динамический массив, а не статический
......
 
cropsentence(text,p); //вот вызов самой функции
......
return 0;
}
Что нужно исправлять?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 18:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача динамического массива строк в функцию и работа с ним (C++):

Передача динамического массива строк в функцию - C++
что не так? программа проверяет правильность скобок для каждой строки #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; ...

Передача двумерного массива в функцию и работа с ним - C++
Имею вызов: fillSquareArrayRandom(&amp;arr, arrMax, arrMax1); и описание: void fillSquareArrayRandom(short int *arr, short...

Передача динамического массива в функцию - C++
У меня задача передать в функцию в качестве параметра динамический 2-хмерный массив и получить результат. Тупо возвращать как результат...

Передача динамического массива в функцию - C++
Помогите разобраться, не могу понять где ошибка. Отлаживал, программа &quot;вываливается&quot; при вызове функции освобождения памяти #include...

Передача динамического массива в функцию - C++
Нужно передать динамический массив в функцию, описав как ссылку (&amp;p). Но я не понимаю, как к нему обращаться в функции.

Передача динамического массива в функцию - C++
Скажите пожалуйста, почему при передаче динамического массива в функцию, адрес локальной переменной (b) отличается от адреса исходной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
20.02.2013, 18:30 #2
C++
1
char *p=new char[1000];  //вот объявление самого массива в программе. Но мне надо сделать динамический массив, а не статический
Возможно требуется вот это?
0
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 18:34  [ТС] #3
Цитата Сообщение от Vaiz Посмотреть сообщение
C++
1
char *p=new char[1000];  //вот объявление самого массива в программе. Но мне надо сделать динамический массив, а не статический
Возможно требуется вот это?
в объявлении массива? Наверное, да.
Но Мне еще нужно его правильно передать в саму функцию, описать в функции и заполнить в функции))
0
Croessmah
Эксперт CЭксперт С++
13209 / 7480 / 841
Регистрация: 27.09.2012
Сообщений: 18,388
Записей в блоге: 3
Завершенные тесты: 1
20.02.2013, 18:36 #4
Цитата Сообщение от kazakovtsev Посмотреть сообщение
Мне нужно в программе объявить динамический массив строк
C++
1
std::vector<std::string> strDynArray;
ну или указатель на массив char*
0
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 18:44  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
std::vector<std::string> strDynArray;
ну или указатель на массив char*
с объявлением мне вроде помогли. Остались непонятые моменты, описанные мною в предыдущем сообщении
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
20.02.2013, 18:49 #6
Цитата Сообщение от kazakovtsev Посмотреть сообщение
Но Мне еще нужно его правильно передать в саму функцию, описать в функции и заполнить в функции))
Это у вас вроде все правильно, попробуйте запустить программу. Только это массив не строк, а символов, т.е. одна строка.

Массив строк объявляется так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char **p;
p=new char*[10]; //кол-во строк
for (int i=0;i<10;i++) p[i]=new char[256] //задаем размер каждой строки
 
//тогда функция описывается вот так
void cropsentence(char *s, char **p)
 
//заполняется либо посимволно в цикле
p[i][j]=temp;
 
//или записывается адрес строки
p[i]=str; //  где str является указателем на строку (char *str)
 
//вызов также
cropsentence(text,p);
0
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 19:01  [ТС] #7
Цитата Сообщение от Vaiz Посмотреть сообщение
Массив строк объявляется так:
C++
1
2
//или записывается адрес строки
p[i]=str; //  где str является указателем на строку (char *str)
Можете пожалуйста подробнее объяснить про данный способ заполнения?
Просто мне нужно заносить в массив по 1 строке в ячейку
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
20.02.2013, 19:08 #8
Цитата Сообщение от kazakovtsev Посмотреть сообщение
Можете пожалуйста подробнее объяснить про данный способ заполнения?
Просто мне нужно заносить в массив по 1 строке в ячейку
Тогда вот этот момент не нужен, т.к. будет просто выделятся память, а потом теряться.
C++
1
for (int i=0;i<10;i++) p[i]=new char[256]
Теперь к заполнению, это может быть выглядеть примерно так:
C++
1
2
3
4
5
6
char *str=new char[256];
for (int i=0; i<10; i++)
{
cin>>str;
p[i]=str;
}
Главное, чтобы str был указателем на динамический массив
0
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 19:21  [ТС] #9
Цитата Сообщение от Vaiz Посмотреть сообщение
Тогда вот этот момент не нужен, т.к. будет просто выделятся память, а потом теряться.
C++
1
for (int i=0;i<10;i++) p[i]=new char[256]
Теперь к заполнению, это может быть выглядеть примерно так:
C++
1
2
3
4
5
6
char *str=new char[256];
for (int i=0; i<10; i++)
{
cin>>str;
p[i]=str;
}
Главное, чтобы str был указателем на динамический массив

У меня вот такой код в функции:
C++
1
2
3
4
5
6
7
8
9
10
void cropsentence(char *s, char **p)
{
char *temp=new char[256];   //здесь объявляю так, как вы сказали
    temp=strtok(s,".");
      while(temp)
      {
       for (int i = 0; i <= 10; i++)  p[i]=temp;  //здесь он заполняется 
      temp=strtok(NULL,".");
      }
}
а потом в программе вот так
C++
1
2
3
4
5
6
7
8
char **p;
p=new char*[100];
for (int i=0;i<100;i++) p[i]=new char[80];  //объявление массива р
 
...
 
cropsentence(text,p);  //передача параметров
   printf("%s", p);    //вывод результата
И в результате программа выводит 3 непонятных символа, которые никак не принадлежат тексту.
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
20.02.2013, 19:44 #10
Можете всю программу дать?
Попробую ее поправить в компиляторе
0
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 19:44  [ТС] #11
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include <stdio.h>
#include <string.h>
#include <iostream.h>
 
 
 //Function_start
void cropsentence(char *s, char **p)
{
char *temp=new char[256];
    temp=strtok(s,".");
      while(temp)
      {
       for (int i = 0; i <= 10; i++)  p[i]=temp;
      temp=strtok(NULL,".");
      }
}
//Function_end
 
 
 
int main(int argc, char* argv[])
{
char text[240], *test;
char **p;
p=new char*[100];
for (int i=0;i<100;i++) p[i]=new char[80];
char stroka[3][80]={"I want to say about this. This thing is very secret. He is ",
                    "Mike. I go to university. I'm 17 years ",
                    "old. Hmmm. This thing very impossible."};
 
    strcpy(text,stroka[0]);
    for (int i = 1; i <= 2; i++)
    strcat(text,stroka[i]);
 
   cropsentence(text,p);
   printf("%s", p);
 
    getchar(); getchar();
    return 0;
}
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
20.02.2013, 20:05 #12
Не знаю правда такой ли смысл программы был, но в общем все точки удалил и разбил на предложения.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <string.h>
#include <iostream>
 
 
 //Function_start
int cropsentence(char *s, char **p,int i)
{
    char *temp=new char[256];
    temp=strtok(s,".");
    while(temp)
    {
        p[i]=temp; i++;
        temp=strtok(NULL,".");
    }
    return i;
}
//Function_end
 
 
 
int main(int argc, char* argv[])
{
    char text[240], *test;
    char **p;
    int n;
    p=new char*[100];
//  for (int i=0;i<100;i++) p[i]=new char[80];
    char stroka[3][80]={"I want to say about this. This thing is very secret. He is ",
                    "Mike. I go to university. I'm 17 years ",
                    "old. Hmmm. This thing very impossible."};
    strcpy(text,stroka[0]);
    n=cropsentence(text,p,0);
    for (int i = 1; i <= 2; i++)
    {
        strcat(text,stroka[i]);
        n=cropsentence(text,p,n);
    }
 
    
    for(int i=0;i<n;i++) printf("%s\n", p[i]);
    getchar(); getchar();
    return 0;
}
1
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 20:30  [ТС] #13
спасибо большое!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 20:30
Привет! Вот еще темы с ответами:

Передача в функцию динамического массива - C++
Всем привет. Есть, например, функция, работающая с динамическим массивом. Допустим я заполняю этот массив нулями. Далее я передаю его в...

Передача динамического массива в функцию - C++
void create_matrix(float **matr,float * mass,int n1); ....................................................................... void...

Передача динамического массива в функцию - C++
Добрый вечер! Пытаюсь передать динамический массив a с размером n в функцию ii, изменить его, вернуть и вывести. Но выводятся какие-то...

Передача динамического массива в функцию - C++
извините мб глупый вопрос но не знаю как передать в функцию свой массив в 2 примере( в 1 примере все норм работает. void...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.02.2013, 20:30
Ответ Создать тему
Опции темы

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