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

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

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

Скопировать один элемент в другой в рамках такого массива - C++

25.08.2013, 01:16. Просмотров 1097. Ответов 21
Метки нет (Все метки)

скажите, плиз, кто-нибудь, как перекочевать, то бишь, скопировать один элемент в другой в рамках такого массива?
C++
1
char *name[COUNT][NAME];
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 01:16     Скопировать один элемент в другой в рамках такого массива
Посмотрите здесь:

Скопировать все элементы массива в другой массив такого же размера - C++
Дан массив. Скопировать все его элементы в другой массив такого же размера: а) в том же порядке расположения элементов; б) в обратном...

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

Скопировать один символьный массив в другой - C++
Привет всем, многоуважаемые пользователи не могу сделать программу. Нам даны два массива s1 и s2 пользователь вводит фразу в массив s2 а...

Скопировать один массив char в другой - C++
у меня двухмерный символьный и одномерный массивы символов. Что в общем то мне нужно. После небольших манипуляций над одномерным массивом,...

Скопировать один динамический массив в другой - C++
Доброго времени суток. int *Array = new int; int *B_Array = new int; Первый массив я наполняю содержимым и мне нужно потом его...

Скопировать один массив в другой, используя указатели - C++
всем привет. простейшая задачка на копирование массива при помощи указателей. все работает, но хочу, чтобы массив рисовался в ряд. а...

Скопировать один файл в другой средствами experimental/filesystem - C++
Хочу скопировать один файл в другой с помощью experimental/filesystem. Вот так получается: #include <fstream> #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
25.08.2013, 01:21
  #2

Не по теме:

Цитата Сообщение от Ko4evnik Посмотреть сообщение
эбаут поинтс, вот хев ай ду!
это надо сохранить пока не переименовали тему

IGPIGP
25.08.2013, 01:46
  #3

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
это надо сохранить пока не переименовали тему
Ноу бады ноуз, вот хэз би дан, тунайт...
Ол лив ин фэйл зис сэд анд лонли найт!

Ko4evnik
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 11
25.08.2013, 01:52  [ТС]     Скопировать один элемент в другой в рамках такого массива #4
Цитата Сообщение от IGPIGP Посмотреть сообщение

Не по теме:


Ноу бады ноуз, вот хэз би дан, тунайт...
Ол лив ин фэйл зис сэд анд лонли найт!

донт край, мэн, зэрэ вил би окэй туморроу
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
25.08.2013, 02:28     Скопировать один элемент в другой в рамках такого массива #5
Цитата Сообщение от Ko4evnik Посмотреть сообщение
донт край, мэн, зэрэ вил би окэй туморроу
Ай ду белив ю вил.
Куда ж Вы денетесь.

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
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
char *what_has_be_done[ ][3]={
    {"No",   "body","knows,"},
    {"what", "has", "be"}, 
    {"done", "to",  "night..."}
};
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
char **let_it_be_done[3];
int sz;
    for(int i=0; i<3; ++i){
let_it_be_done[i] = new char*[3];//
for(int j=0; j<3; ++j){
sz=strlen(what_has_be_done[i][j]);
let_it_be_done[i][j] = new char[sz+1];//
}
cout<<endl;
    }
 
for(int i=0; i<3; ++i){
for(int j=0; j<3; ++j){
strcpy(let_it_be_done[i][j], what_has_be_done[i][j]);
cout<<let_it_be_done[i][j]<<" ";
}
cout<<endl;
}
cout<<"Фор ту континьить плиз,\nпрэсс э кей brave knight..."<<endl; 
cin.get();
    return 0;
}
Ko4evnik
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 11
25.08.2013, 21:38  [ТС]     Скопировать один элемент в другой в рамках такого массива #6
Грейт! Фенк ю вери матч!
Ай хоуп айл кэн дан май таск тунайт
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
25.08.2013, 21:58     Скопировать один элемент в другой в рамках такого массива #7
Цитата Сообщение от Ko4evnik Посмотреть сообщение
Грейт! Фенк ю вери матч!
Ай хоуп айл кэн дан май таск тунайт
Ю ар вэлкам.
Бивэйр оф чар эррэйз виз ту димэншенз,
Ху ноуз эбаут, вотил хэппэнд, бат донт мэншон...
Ай шюр, ол хэз бин биинг вэл туморроу,
Лэт фар эвэй фром ю би эни сорроу.
Гуд лак!
Ko4evnik
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 11
27.08.2013, 01:14  [ТС]     Скопировать один элемент в другой в рамках такого массива #8
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ю ар вэлкам.
Бивэйр оф чар эррэйз виз ту димэншенз,
Ху ноуз эбаут, вотил хэппэнд, бат донт мэншон...
Ай шюр, ол хэз бин биинг вэл туморроу,
Лэт фар эвэй фром ю би эни сорроу.
Гуд лак!
так я понимаю, что мне и не нужен такого вида массив
C++
1
char *name[COUNT][NAME];
мне сразу надо брать
C++
1
char **name[COUNT];
и с ним уже оперировать? так же проще, я правильно понял?
san92der
14 / 14 / 3
Регистрация: 27.10.2012
Сообщений: 108
27.08.2013, 01:30     Скопировать один элемент в другой в рамках такого массива #9
В этих двух строчках написано одно и тоже. Просто во второй надо будет дополнительно выделять и освобождать память, когда в первой записи ты уже выделил для неё [NAME] элементов.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
27.08.2013, 02:07     Скопировать один элемент в другой в рамках такого массива #10
Вот как это можно сделать с динамическим массивом:
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
48
49
50
51
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
char *what_has_be_done[ ][3]={
    {"No",   "body","knows,"},
    {"what", "has", "be"}, 
    {"done", "to",  "night..."}
};
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
char **let_it_be_done[3];
int sz;
    for(int i=0; i<3; ++i){
let_it_be_done[i] = new char*[3];//
for(int j=0; j<3; ++j){
sz=strlen(what_has_be_done[i][j]);
let_it_be_done[i][j] = new char[sz+1];//
}
cout<<endl;
    }
 
for(int i=0; i<3; ++i){
for(int j=0; j<3; ++j){
strcpy(let_it_be_done[i][j], what_has_be_done[i][j]);
cout<<let_it_be_done[i][j]<<" ";
}
}
cout<<endl;
//теперь поменяем значение в последнем элементе со строки "night..." на строку "knight..."
//строка источник длинее строки назначения и значит нужно освободить память от строки 9 симолов
//выделить тамже место под 10 и скопировать туда "knight..."
delete let_it_be_done[2][2];
char *newStr = "knight...";
sz=strlen(newStr);//9
let_it_be_done[2][2] = new char[sz+1];
strcpy(let_it_be_done[2][2],newStr);
//готово, теперб выводим...
for(int i=0; i<3; ++i){
for(int j=0; j<3; ++j){
cout<<let_it_be_done[i][j]<<" ";
}
}
cout<<endl;
cout<<"Фор ту континьить плиз,\nпрэсс э кей brave knight..."<<endl; 
cin.get();
    return 0;
}
Тут видно как перевыделить память и записать новую строку.
Ko4evnik
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 11
28.08.2013, 18:13  [ТС]     Скопировать один элемент в другой в рамках такого массива #11
Но неужели нет более простого способа, не прибегая к дополнительным массивам, скопировать [i+1] запись в [i] запись?
ну типа как в обычном массиве
C++
1
2
3
char name[i][j];
 
strcpy(name[i],name[i+1]);
???
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
28.08.2013, 18:27     Скопировать один элемент в другой в рамках такого массива #12
Цитата Сообщение от Ko4evnik Посмотреть сообщение
Но неужели нет более простого способа, не прибегая к дополнительным массивам, скопировать [i+1] запись в [i] запись?
ну типа как в обычном массиве
Что-то небыстро дело движется. Чувствуется основательность.
Если длина строк совпадает, то в динамическом массиве можно. Если массив const char, то только долото и молоток помогут. Не пораньтесь.
Ko4evnik
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 11
28.08.2013, 19:04  [ТС]     Скопировать один элемент в другой в рамках такого массива #13
А значит, нужно выделять новую память для [n] элемента в размере памяти [n+1] элемента каждый раз?

C++
1
2
3
4
5
6
7
8
char **let_it_be_done[3];
int sz;
    for(int i=0; i<3; ++i){
let_it_be_done[i] = new char*[3];
for(int j=0; j<3; ++j){
sz=strlen(what_has_be_done[i][j]);
[B]let_it_be_done[i][j] = new char[sz+1];[/B]//
}
а в случае, если я хочу сделать массив строк (1 столбец), пока что статический
C++
1
char *name[COUNT][1];
то мне стоит сделать так?
C++
1
2
3
sz = strlen(what_has_be_done[1][0]);
    what_has_be_done[0][0] = new char[sz+1];
    strcpy(what_has_be_done[0][0], what_has_be_done[1][0]);
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
28.08.2013, 19:28     Скопировать один элемент в другой в рамках такого массива #14
Цитата Сообщение от Ko4evnik Посмотреть сообщение
а в случае, если я хочу сделать массив строк (1 столбец), пока что статический
Это загадочное заявление. Как и весь вопрос. "А если" тут пример совершенно неверного планирования. Давайте Вы полностью приведёте условие Вашей задачи и код который удалось написать. Предварительно можно почитать о строках в стиле Си. При выделении памяти на стеке перевыделить её не получится. Что касается отличия строки как массива и массива строк как таковых, то они не являются типами детерминированной длины. В этом смысле копирование их элементов отличается от копирования элементов в массивах вроде int Arr[].
Расскажите задачу или вопрос будет висеть долго. Have fun!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 19:42     Скопировать один элемент в другой в рамках такого массива
Еще ссылки по теме:

Скопировать из исходного вектора положительные элементы в один массив, а отрицательные - в другой - C++
Переписать отдельно в разные массивы положительные и отрицательные элементы вектора.

Скопировать один массив в другой так, чтобы элементы оказались в обратном порядке - C++
Пользуясь двумя указателями на массивы целых чисел, скопировать один массив в другой так, чтобы во втором массиве элементы находились в...

Если елементы массива соседние одинаковы то один из них заменяется на 0 а другой увеличиваетмя на один - C++
#include &quot;stdafx.h&quot; #include&lt;string&gt; #include &lt;cmath&gt; #include &lt;iostream&gt; #include&lt;locale&gt; using namespace std; const int...

Скопировать два двумерных массива в один одномерный - C++
int ReshKardanoA; cout&lt;&lt;endl; int k=0,s=0,l=0; j=0; while(s==32) { if(k==3) { l++; for(i=0;i&lt;4;i++) ...

Как скопировать символ из символьного массива в другой массив - C++
Есть массив s и r в обоих по 8 символов + \0 (окончание строки). В s есть символ &quot;т&quot;, как его скопировать, например, в r? Проблема в...


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

Или воспользуйтесь поиском по форуму:
Ko4evnik
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 11
28.08.2013, 19:42  [ТС]     Скопировать один элемент в другой в рамках такого массива #15
Ок. Итак, заполняется таблица. Но поскольку я застрял, она состоит из одного столбца и определенного количества строк [COUNT]. При помощи switch-case выбирается пункт из меню. Одним из этих пунктов является удаление ненужного нам поля и сдвиг всех нижестоящих элементов вверх.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "windows.h"
#include <iostream>
 
using namespace std;
 
void vvod(void);
void deleterec();
void show();
 
#define NAME 1
#define COUNT 3
 
char *name[COUNT][NAME];
 
 
int main()
{
    system("cls");
    char ch='0';
 
    printf("1. Enter record\n");
 
    printf("3. Delite\n");
 
    printf("Select from the menu: \n");
    
    while ((ch!='1') && (ch!='2') && (ch!='3') && (ch!='4') && (ch!='5'))
    {ch = getchar();
 
        switch(ch)
        {
            case '1':
                vvod();
            case '2':
                edit();
            case '3':
                deleterec();
            case '4':
                exit(0);
            case '5':
                fuckmeiamfamous();
        }
    }
 
    return 0;
}
 
void vvod(void)
{
    system("cls");
 
    for (int i=0;i<COUNT;i++)
    {
        printf("Input %d name:\n",i);
        //scanf("%s",list[i]);
        scanf("%s",name[i]);
        if(!name[i]) break;
    }
 
    main();
}
 
void deleterec()
{
    system("cls");
    show();
 
    int n;
    char ch;
    
    printf("Which record would you want to delete?\n");
    scanf("%d",&n);
    
    printf("Are you sure? y/n\n");
    
    do
    {
        ch=getchar();
    } while ((ch != 'y' && ch != 'n'));
 
    if(ch=='y')
    {
        for(int i=n-1;i<COUNT;++i)
        {
//Здесь-то и начинается вся заварушка
//          int sz;
 
//          sz = strlen(name[1][0]);
//          name[0][0] = new char[sz+1];
//          strcpy(name[0][0], name[1][0]);
        }
 
        printf("Successfull delete...\n");
 
        getch();
        main();
    }
    
    if (ch=='n') main();
}
 
void show(void)
{
    for(int i=0;i<COUNT;i++)
    {
        //printf("%d: %s\n", i+1, list[i]);
        printf("%d: %s\n", i+1, name[i]);
    }
}
Так вот, это удаление я и пытаюсь реализовать копированием всех элементов на [n-1] позицию.
Yandex
Объявления
28.08.2013, 19:42     Скопировать один элемент в другой в рамках такого массива
Ответ Создать тему
Опции темы

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