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

_itoa() и двумерные массивы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
leshac
0 / 0 / 0
Регистрация: 18.03.2009
Сообщений: 13
18.03.2009, 15:34     _itoa() и двумерные массивы #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
void main()
{
    int a[5]={1,2,3,4,5};
    char b[5];
 
    for(int i=0;i<5;i++)
    {
        int z=*_itoa(a[i],b,10);
        b[i]=z;
        cout<<b[i];
    }
}
Код работает нормально, а теперь внимание вопрос: Как заставить работать функцию с двумерным массивом? Аля int a[5][5] и char b[5][5]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CppProgrammer
3 / 3 / 0
Регистрация: 18.03.2009
Сообщений: 12
18.03.2009, 15:45     _itoa() и двумерные массивы #2
А какая разница, какой размерности массив? Ты передаешь в параметре не массив, а число типа int.
leshac
0 / 0 / 0
Регистрация: 18.03.2009
Сообщений: 13
18.03.2009, 15:48  [ТС]     _itoa() и двумерные массивы #3
Непонимаю как записать чтобы компилятор неругался

C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
        int z=*_itoa(a[i][j],b,10);
        b[i][j]=z;
        cout<<b[i][j];
        }
    }
YurA_280784
Заблокирован
18.03.2009, 16:13     _itoa() и двумерные массивы #4
Массив b должен быть не 5х5 как ты думаешь а по крайней мере 5хstrlen(symbl), где symbl - твой диджит в текстовой форме.
Предлагаю обойтись вообще без itoa
C++
1
2
3
4
5
6
7
8
9
10
11
char chBuf[256];
char *b = new char *[5];
for(int i=0,j;i<5;i++)  
{       
for(j=0;j<5;j++)//Дядя кто ж в цикле каждый раз j заново объявляет, в 1-м форе объяви и всё     
{       
     b[i][j] = sprintf(chBuf,"%s",a[i][j]);     
    cout<<b[i][j];      
}
cout<<"\r\n";   
}
Добавлено через 10 минут 33 секунды
Так сорри поторопился, хотел оч круто накодить, вот рабочий код!!!Сам только что проверил
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
#include <iostream.h>
#include <stdio.h>
 
int a[][5]=
{
    {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}
};
 
void main()
{
    char chBuf[256];
    char ***b = new char **[5];
    for(int i=0,j;i<5;i++)  
    {
        b[i] = new char *[5];
        for(j=0;j<5;j++)//Дядя кто ж в цикле каждый раз j заново объявляет, в 1-м форе объяви и всё     
        {   
            b[i][j] = new char[sprintf(chBuf,"%d\t",a[i][j])];
            b[i][j] = chBuf;            
            cout<<b[i][j];      
        }
        cout<<"\r\n";   
    }
}
Добавлено через 3 минуты 52 секунды
Так точней будет, просто в предыдущем примере b[i][j] содержит ещё и '\t', в результате если использовать atoi(b[i][j]) можно получить каку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main()
{
    char chBuf[256];
    char ***b = new char **[5];
    for(int i=0,j;i<5;i++)  
    {
        b[i] = new char *[5];
        for(j=0;j<5;j++)//Дядя кто ж в цикле каждый раз j заново объявляет, в 1-м форе объяви и всё     
        {   
            b[i][j] = new char[sprintf(chBuf,"%d",a[i][j])];
            b[i][j] = chBuf;            
            cout<<b[i][j]<<"\t";        
        }
        cout<<"\r\n";   
    }
}
leshac
0 / 0 / 0
Регистрация: 18.03.2009
Сообщений: 13
18.03.2009, 20:03  [ТС]     _itoa() и двумерные массивы #5
А можно как-то обойтись без двухмерной динамики ? Объясни новичку пожалуйста, что плохо в том что я объявляю каждый раз в циле j заново? Мне изначально дан конкретный размер двухмерного интового массива элементы которого мне необходимо перекинуть в двухмерную строку.
Alligieri
CEO
Эксперт C++
 Аватар для Alligieri
2247 / 1236 / 24
Регистрация: 16.03.2009
Сообщений: 3,581
18.03.2009, 20:06     _itoa() и двумерные массивы #6
Цитата Сообщение от leshac Посмотреть сообщение
А можно как-то обойтись без двухмерной динамики ? Объясни новичку пожалуйста, что плохо в том что я объявляю каждый раз в циле j заново?
для программ таких размеров - разницы нет, но если бы она была больше, а компьютер на котором ты работаешь - не слишком производительным то разница в скорости работы была б заметной.
YurA_280784
Заблокирован
19.03.2009, 11:03     _itoa() и двумерные массивы #7
Без двухмерных массивов можно обойтись лишь в случае использования цифр от 0 до 9. Хотя ваще можно вместо цифры делать вот так b[i][j] = (char)a[i][j];Тогда у тебя вместо цифр будут соответствующие символы ansci кодировки, но єт мона юзать если цифиря от -128 до 128, так что решай сам. Ну а за объяву j тебе Alligieri , очень пристойно объяснил,вот.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2009, 13:35     _itoa() и двумерные массивы
Еще ссылки по теме:

C++ Malloc. Двумерные массивы
Задачи на двумерные массивы C++
C++ Двумерные массивы в языке С

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

Или воспользуйтесь поиском по форуму:
leshac
0 / 0 / 0
Регистрация: 18.03.2009
Сообщений: 13
20.03.2009, 13:35  [ТС]     _itoa() и двумерные массивы #8


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int a1[2][2]={1,2,3,4};
    char b1[2][2];
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<2;j++)
        {
            
        
            char c = a1[i][j]+48;
        b1[i][j]=c;
    cout<<b1[i][j];
        }
    }
Yandex
Объявления
20.03.2009, 13:35     _itoa() и двумерные массивы
Ответ Создать тему
Опции темы

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