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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
ivpoed
1 / 1 / 0
Регистрация: 21.03.2010
Сообщений: 38
#1

Индексация двухмерного массива char - C++

26.03.2010, 23:49. Просмотров 1385. Ответов 4
Метки нет (Все метки)

Подскажите пожалуйста, как правильно передать в функцию указатель на двухмерный массив char и как его индексировать?
Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2010, 23:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Индексация двухмерного массива char (C++):

Заполнение двухмерного массива типа char символами цифр - C++
Приветствую всех! Разбираю одну задачу, в которой двухмерный символьный массив заполняется цифрами, представленными в качестве символов....

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

Индексация массива - C++
Ребят еще такой вопрос есть формула выглядит в след виде: сумма (k/(Xк+k)) где k=1,2,3,4...n. Сумму нужно посчитать циклически, но вопрос в...

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

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

Поворот массива на 90 градусов (cannot convert form char to char*) - C++
Пытаюсь повернуть массив на 90 градусов. Понимаю что проблема в преобразовании данных, но не знаю как исправить( Может кто подсказать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
27.03.2010, 00:37 #2
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define ROWS 5
#define MAX_STR 256
 
void printRows(char **arr, size_t rows){
    size_t i;
    for ( i = 0; i < rows; ++i )
        printf("%s\n", arr[i]);
}
 
int main(void){
    char buf[MAX_STR], *p, **arr;
    int i;
    
    if ( ( arr = (char**)malloc(sizeof(char*) * ROWS) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    printf("Enter %d strings:\n", ROWS);
    for( i = 0; i < ROWS; ++i ){
        if ( !fgets(buf, MAX_STR, stdin) ){
            fprintf(stderr, "Can't get row");
            exit(1);
        }
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( !*buf ){
            fprintf(stderr, "Empty rows not allowed!\n");
            exit(1);
        }
        if ( ( arr[i] = strdup(buf) ) == NULL ){
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
    }
    printf("You have entered:\n");
    printRows(arr, ROWS);
    
    for ( i = 0; i < ROWS; ++i )
        free(arr[i]);
    free(arr);
    
    exit(0);
}
1
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
27.03.2010, 00:47 #3
Хороший вопрос.
Есть 2 подхода.
1. (школярский)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#define N 20
#define M 35
fm(int A[N][M]....)
{
   for(i=0;i<n;i++)
     for(j=0; j<M j++) 
        if (A[i][j]==0) Oh!
}
main()
{
  int B[N][M];
  fm(B);
}
2й -изощренный
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int **CreateM(int n, int m)
{  int **a;
     a = (int **)malloc(n * sizeof(int *));
     for(i=0; i<n; i++)
       a[i] = (int *) malloc(m*sizeof(int));
     return a;
}
fm(int **x, n, m)
{
   for(i=0;i<n;i++)   // абсолютно тоже самое! 
     for(j=0; j<M j++) 
        if (A[i][j]==0) Oh!
}
main()
{
  int **B;
  B = CreateM(n, m);
  fm(B, n, m);
}
2-й подход значительно гибче. Размерность массива ты можешь определить по ходу счета,
часто она зависит от исходных данных
Кроме того, при некоторой модификации он дает возможность делать строки разной длины.
1
ivpoed
1 / 1 / 0
Регистрация: 21.03.2010
Сообщений: 38
27.03.2010, 08:54  [ТС] #4
Спасибо большое. Я всё пытался с одним указателем. Не думал, что тут нужен указатель на указатель.
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
27.03.2010, 14:01 #5
ivpoed, вообще-то можно и с одним указателем. Делаем сами некоторую работу за транслятор,
код чуть менее понятный, но покороче
C
1
2
int A[N*M];
 A[i*M+j] = ... // это то же, что и A[i][j] в предыдущих вариантах
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2010, 14:01
Привет! Вот еще темы с ответами:

Индексация элементов массива - C++
Всем привет! Есть следующий код: const double c = { // particle velocities {0, 0}, // zero {1,...

Приведение массива char[] (или char* ) в LPCTSTR - C++
Задача: пользователь вводит директорию, нужно проверить существует ли эта директория. Функция DirExists проверки работает правильно, но...

Индексация массива в динамической памяти - C++
Всем привет! Вроде очень простой вопрос, но я не смог найти на него ответа. Вот код: #include &lt;iostream&gt; using namespace std; ...

Запись в *char элемента из массива *char[i] - C++
Есть динамический массив, например char *drives = {&quot;A:&quot;, &quot;B:&quot;, &quot;C:&quot;, &quot;D:&quot;, &quot;E:&quot;, &quot;F:&quot;, &quot;G:&quot;, &quot;H:&quot;, &quot;I:&quot;, &quot;J:&quot;, &quot;K:&quot;, &quot;L:&quot;,&quot;M:&quot;, &quot;N:&quot;,...


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

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

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