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

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

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

Динамический массив строк (вставить строку с номером к) - C++

08.06.2013, 14:32. Просмотров 588. Ответов 6
Метки нет (Все метки)

Написал программу,задача была сформировать динамический массив и вставить строку с номером к.(вводить пользователь).Никак не пойму как производится сдвиг,пытаюсь сдвинуть но происходит лишь замена элемента, подскажите пожалуйста как сдвигаются элементы.Вот код:
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
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n,k;
cout<<"Пожалуйста введите количество строк";
cin>>n;
char **s = new char* [n];
for(int i = 0; i < n; ++i){
s[i] = new char [n];
}
  for (int i=0;i<n;i++)
      cin>>s[i];
  cout<<"Вы ввели данные строки: "<<endl;
  for (int i=0;i<n;i++)
      cout<<s[i]<<endl;
  cout<<"На какую позицию вы хотите вставить строчку?";
  cin>>k;
  cout<<"Введите строчку которую вы хотите вставить: ";
  char str[100];
  cin>>str;
  char **s1 = new char* [n+1];
  for(int i = 0; i < n; ++i){
   s1[i] = new char [n+1];
}
     
for (int i=0;i<n;i++)
{
    s1[i]=s[i];
    if (i==k-1)(s[i+1]=s[i]) && (s1[i]=str);
    else s1[i-1]=s[i];
    cout<<s1[i]<<endl;
}
cout<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 14:32     Динамический массив строк (вставить строку с номером к)
Посмотрите здесь:

C++ Динамический массив строк
C++ динамический массив строк
C++ Вставить элемент в массив со значением 0 после элемента с номером N
Массив: Вставить элемент с номером к. C++
Сформировать динамический массив строк; удалить из него строку с заданным номером C++
Создать динамический массив строк, заполнить его и потом добавить строку после самой короткой строки C++
C++ Динамический массив строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
08.06.2013, 14:41     Динамический массив строк (вставить строку с номером к) #2
придется перевыделять память под массив строк перекопировать до нужной позиции, вставлять строчку, вставлять остальное
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
08.06.2013, 14:51  [ТС]     Динамический массив строк (вставить строку с номером к) #3
Цитата Сообщение от Кудаив Посмотреть сообщение
придется перевыделять память под массив строк перекопировать до нужной позиции, вставлять строчку, вставлять остальное
я это и пробывал сделать,но ничего не выходит

Добавлено через 8 минут
Цитата Сообщение от Kinroom Посмотреть сообщение
я это и пробывал сделать,но ничего не выходит
Все сделал.Кому интерестно вот код:
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
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n,k;
cout<<"Пожалуйста введите количество строк";
cin>>n;
char **s = new char* [n];
for(int i = 0; i < n; ++i){
s[i] = new char [n];
}
  for (int i=0;i<n;i++)
      cin>>s[i];
  cout<<"Вы ввели данные строки: "<<endl;
  for (int i=0;i<n;i++)
      cout<<s[i]<<endl;
  cout<<"На какую позицию вы хотите вставить строчку?";
  cin>>k;
  cout<<"Введите строчку которую вы хотите вставить: ";
  char str[100];
  cin>>str;
  char **s1 = new char* [n+1];
  for(int i = 0; i < n; ++i){
   s1[i] = new char [n+1];
}
     
for (int i=0;i<n+1;i++)
{
    
    if(i<k-1) s1[i]=s[i];
    if(i==k-1) s1[i]=str;
    if (i>k-1) (s1[i]=s[i-1]) ;
    
    cout<<s1[i]<<endl;
    
}
cout<<endl;
}
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
08.06.2013, 15:04     Динамический массив строк (вставить строку с номером к) #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
char **tmp = new char* [n + 1];
...
cout<<"На какую позицию вы хотите вставить строчку?";
cin>>k;
cout<<"Введите строчку которую вы хотите вставить: ";
int i = 0;
for(i = 0; i < k; ++i)
   tmp[i] = s[i];
tmp[i] =  new char[100]; 
cin>>tmp[i];
 
for(; i < n+1; ++i)
   tmp[i] = s[i - 1];
 
delete[] s;
s = tmp;
что то вроде этого - компилятора под рукой нет

Добавлено через 2 минуты
Kinroom, где у тебя освобождение ресурсов?
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
08.06.2013, 15:09  [ТС]     Динамический массив строк (вставить строку с номером к) #5
Цитата Сообщение от Кудаив Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
char **tmp = new char* [n + 1];
...
cout<<"На какую позицию вы хотите вставить строчку?";
cin>>k;
cout<<"Введите строчку которую вы хотите вставить: ";
int i = 0;
for(i = 0; i < k; ++i)
   tmp[i] = s[i];
tmp[i] =  new char[100]; 
cin>>tmp[i];
 
for(; i < n+1; ++i)
   tmp[i] = s[i - 1];
 
delete[] s;
s = tmp;
что то вроде этого - компилятора под рукой нет

Добавлено через 2 минуты
Kinroom, где у тебя освобождение ресурсов?
дописал в конце это
C++
1
2
3
4
5
6
for(int i = 0; i < n; ++i)
delete [] s[i];
delete [] s;
for(int i = 0; i < n; ++i)
delete [] s1[i];
delete [] s1;
но почему-то в конце программа вылетает
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
08.06.2013, 15:12     Динамический массив строк (вставить строку с номером к) #6
Цитата Сообщение от Kinroom Посмотреть сообщение
for(int i = 0; i < n; ++i)
delete [] s1[i];
когда

Цитата Сообщение от Kinroom Посмотреть сообщение
char **s1 = new char* [n+1]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 15:24     Динамический массив строк (вставить строку с номером к)
Еще ссылки по теме:

C++ В матрицу вставить строку заданной последовательности чисел перед строкой с номером x
Вставить элемент в динамический массив C++
Как добавить элемент с заданным номером в динамический массив? C++
Перед строкой матрицы с номером вставить строку из нулей C++
C++ Как вставить элемент в динамический массив?

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

Или воспользуйтесь поиском по форуму:
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
08.06.2013, 15:24  [ТС]     Динамический массив строк (вставить строку с номером к) #7
Цитата Сообщение от Кудаив Посмотреть сообщение
когда
исправил)спасибо)
Yandex
Объявления
08.06.2013, 15:24     Динамический массив строк (вставить строку с номером к)
Ответ Создать тему
Опции темы

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