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

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

Восстановить пароль Регистрация
 
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 18:05     Передача динамического массива строк в функцию и работа с ним #1
Доброго времени суток. Помогите, пожалуйста. Мне нужно в программе объявить динамический массив строк, затем в пользовательской функции его заполнять.
У меня вот такие куски кода, связанные с этим:
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;
}
Что нужно исправлять?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 1
20.02.2013, 18:30     Передача динамического массива строк в функцию и работа с ним #2
C++
1
char *p=new char[1000];  //вот объявление самого массива в программе. Но мне надо сделать динамический массив, а не статический
Возможно требуется вот это?
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 18:34  [ТС]     Передача динамического массива строк в функцию и работа с ним #3
Цитата Сообщение от Vaiz Посмотреть сообщение
C++
1
char *p=new char[1000];  //вот объявление самого массива в программе. Но мне надо сделать динамический массив, а не статический
Возможно требуется вот это?
в объявлении массива? Наверное, да.
Но Мне еще нужно его правильно передать в саму функцию, описать в функции и заполнить в функции))
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
20.02.2013, 18:36     Передача динамического массива строк в функцию и работа с ним #4
Цитата Сообщение от kazakovtsev Посмотреть сообщение
Мне нужно в программе объявить динамический массив строк
C++
1
std::vector<std::string> strDynArray;
ну или указатель на массив char*
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 18:44  [ТС]     Передача динамического массива строк в функцию и работа с ним #5
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
std::vector<std::string> strDynArray;
ну или указатель на массив char*
с объявлением мне вроде помогли. Остались непонятые моменты, описанные мною в предыдущем сообщении
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 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);
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 строке в ячейку
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 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 был указателем на динамический массив
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 непонятных символа, которые никак не принадлежат тексту.
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 1
20.02.2013, 19:44     Передача динамического массива строк в функцию и работа с ним #10
Можете всю программу дать?
Попробую ее поправить в компиляторе
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;
}
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 20:30     Передача динамического массива строк в функцию и работа с ним
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
20.02.2013, 20:30  [ТС]     Передача динамического массива строк в функцию и работа с ним #13
спасибо большое!!!
Yandex
Объявления
20.02.2013, 20:30     Передача динамического массива строк в функцию и работа с ним
Ответ Создать тему
Опции темы

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