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

Работа с типами данных в массиве - C++

Восстановить пароль Регистрация
 
Atma24
 Аватар для Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 66
10.07.2013, 15:00     Работа с типами данных в массиве #1
Всем доброго времени суток , помогите выяснить одну вещь.
Есть у меня массив типа char.
Вот к примеру {1f-21df }
Каким образом можно преобразовать тип элементов массива в int, чтобы в нем можно было работать как с типом int.
Заранее спс всем за понимание.

Добавлено через 43 секунды
Ой ну и конечно буковки то откинуть.....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 15:00     Работа с типами данных в массиве
Посмотрите здесь:

C++ Работа с базовыми типами
Помогите разобраться с типами данных C++
C++ Проблема с типами данных
C++ Пoмoгите со строковыми типами данных
C++ Работа сортировки с любыми типами данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
10.07.2013, 15:08     Работа с типами данных в массиве #2
Цитата Сообщение от Atma24 Посмотреть сообщение
Вот к примеру {1f-21df }
Это не массив типа char, это вообще непонятно что. Ну ок, предположим. Тогда создаем другой массив, int, такого же размера, и поэлементно копируем в него содержимое исходного массива.
C++
1
2
3
4
5
char char_array[] = "abcdef";
int int_array[6];
for (int j = 0; j < 6; ++j) {
    int_array[j] = char_array[j];
}
int более вместительный тип, чем char, поэтому конвертация типов в пятой строке не понадобится.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
10.07.2013, 15:10     Работа с типами данных в массиве #3
Atma24, любой элемент массива char доступен по индексу как символ char. При присвоении типу int, а также в арифметических операциях c типом int происходит автоматическое преобразование к int. Можно сделать это явно (чтобы компилятор не предупреждал):
C++
1
2
char *chArr = "mama";
int a = (int)chArr[1];//целое соответствующее a (lat) в текущей кодировке

Не по теме:

Буковки не выбрасывайте, - они хорошие.

Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.07.2013, 16:17     Работа с типами данных в массиве #4
Цитата Сообщение от zenw Посмотреть сообщение
int более вместительный тип, чем char, поэтому конвертация типов в пятой строке не понадобится.
Приведение типов (то, что Вы назвали "конвертацией") будет производится всё равно. Другое дело, что потери точности в данном случае не будет.
Цитата Сообщение от Atma24 Посмотреть сообщение
чтобы в нем можно было работать как с типом int.
Можно прямо в месте использования написать:
C++
1
static_cast<int>(c); // c - типа char.
Например такую конструкцию можно использовать, когда нужно вывести код символа на консоль.
Цитата Сообщение от IGPIGP Посмотреть сообщение
а также в арифметических операциях c типом int
int'у не обязательно участвовать в вычислениях. Например, результат умножения двух char'в тоже будет int.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
10.07.2013, 18:06     Работа с типами данных в массиве #5
Цитата Сообщение от Tulosba Посмотреть сообщение
nt'у не обязательно участвовать в вычислениях
Да, правильнее было бы сказать "приводится к типу int везде где ожидается тип int", но я подумал, что в данном случае так понятнее.
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
10.07.2013, 18:40     Работа с типами данных в массиве #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Приведение типов (то, что Вы назвали "конвертацией") будет производится всё равно
Я имел в виду явное приведение. Но с вами согласен.
Atma24
 Аватар для Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 66
11.07.2013, 07:17  [ТС]     Работа с типами данных в массиве #7
Цитата Сообщение от zenw Посмотреть сообщение
Это не массив типа char, это вообще непонятно что. Ну ок, предположим. Тогда создаем другой массив, int, такого же размера, и поэлементно копируем в него содержимое исходного массива.
C++
1
2
3
4
5
char char_array[] = "abcdef";
int int_array[6];
for (int j = 0; j < 6; ++j) {
    int_array[j] = char_array[j];
}
int более вместительный тип, чем char, поэтому конвертация типов в пятой строке не понадобится.
пробую этим методом, получается следующий код....

C++ (Qt)
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 "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#define maxsize 10
#define eof -1
 
void otr(char mass[],int ot[],int kol)
{
    
for(int i=0;i<kol-1;i++)
    ot[i]=mass[i];
    
}
int line(char mass[],int dlina)
{
    int i,c;
    for(i=0;i<dlina-1 && (c=getchar())!= eof && c!='\n';i++)
        mass[i]=c;
        mass[i]='\0';
        i++;
        return(i);
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char a[maxsize];
    int b[maxsize];
    printf("Введите массив:\n");
    int kol=line(a,maxsize);
    printf("Массив : %s\n",a);
    printf("Количество символов = %d\n",kol);
    otr(a,b,kol);
    printf("Массив : %d\n",b);
    _getch();
}
При выводе массива "b" выводиться не то что ожидается. Подскажите в чем может быть ошибка.
Изображения
 
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:05     Работа с типами данных в массиве #8
Цитата Сообщение от Atma24 Посмотреть сообщение
При выводе массива "b" выводиться не то что ожидается.
А что ожидалось?
Atma24
 Аватар для Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 66
11.07.2013, 09:05  [ТС]     Работа с типами данных в массиве #9
Цитата Сообщение от Atma24 Посмотреть сообщение
пробую этим методом, получается следующий код....

C++ (Qt)
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 "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#define maxsize 10
#define eof -1
 
void otr(char mass[],int ot[],int kol)
{
    
for(int i=0;i<kol-1;i++)
    ot[i]=mass[i];
    
}
int line(char mass[],int dlina)
{
    int i,c;
    for(i=0;i<dlina-1 && (c=getchar())!= eof && c!='\n';i++)
        mass[i]=c;
        mass[i]='\0';
        i++;
        return(i);
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char a[maxsize];
    int b[maxsize];
    printf("Введите массив:\n");
    int kol=line(a,maxsize);
    printf("Массив : %s\n",a);
    printf("Количество символов = %d\n",kol);
    otr(a,b,kol);
    printf("Массив : %d\n",b);
    _getch();
}
При выводе массива "b" выводиться не то что ожидается. Подскажите в чем может быть ошибка.
Разобрался, но появились еще моменты:
C++ (Qt)
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#define maxsize 10
#define eof -1
 
void otr(char mass[],int ot[],int kolich)
{
 
for(int i=0;i<kolich-1;i++)
    ot[i]=mass[i];
std::cout<<"Массив, вывод в функции = { ";
    for(int i=0;i<kolich-1 ;i++)
      std::cout<<(char)ot[i]<<" ";
      std::cout<<"}"<<std::endl;
        
        
        
}
int line(char mass[],int dlina)
{
    int i,c;
    for(i=0;i<dlina-1 && (c=getchar())!= eof && c!='\n';i++)
        mass[i]=c;
        mass[i]='\0';
        i++;
        return(i);
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char a[maxsize];
    int b[maxsize];
    printf("Введите массив:\n");
    int kol=line(a,maxsize);
    printf("Массив : %s\n",a);
    printf("Количество символов = %d\n",kol);
    otr(a,b,kol);
    std::cout<<"Массив, вывод в основн функции = { ";
    for(int i=0;i<kol-1 ;i++)
      std::cout<<static_cast<int>(b[i])<<" ";
      std::cout<<"}"<<std::endl;
    
    _getch();
}
Подскажите пожалуйста как работать со знаками плюс и минус?
Миниатюры
Работа с типами данных в массиве  
Atma24
 Аватар для Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 66
11.07.2013, 09:07  [ТС]     Работа с типами данных в массиве #10
Цитата Сообщение от alsav22 Посмотреть сообщение
А что ожидалось?
ожидал что "12345" ,будет)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:19     Работа с типами данных в массиве #11
C++
1
std::cout<<static_cast<int>(b[i])<<" ";
Зачем int к int приводите?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.07.2013, 09:27     Работа с типами данных в массиве #12

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем int к int приводите?
чтобы целый стал ещё целее

Цитата Сообщение от Atma24 Посмотреть сообщение
for(int i=0;i<kolich-1;i++)
странное условие, либо надо убрать -1, либо сделать неравенство не строгим.
Цитата Сообщение от Atma24 Посмотреть сообщение
#define eof -1
зачем? есть же стандартный http://www.cplusplus.com/reference/cstdio/EOF/
Atma24
 Аватар для Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 66
11.07.2013, 09:42  [ТС]     Работа с типами данных в массиве #13
Цитата Сообщение от Atma24 Посмотреть сообщение

Подскажите пожалуйста как работать со знаками плюс и минус?
После перевода массива в int сейчас выводится кодировка по таблице аски. Но как быть с минусами и плюсами хотелось бы чтоб массив приобрел вид положительных и отрицательных чисел, а не отображение их в таком виде.

Добавлено через 11 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
std::cout<<static_cast<int>(b[i])<<" ";
Зачем int к int приводите?
С этим разобрался , забыл стереть)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:43     Работа с типами данных в массиве #14
Цитата Сообщение от Atma24 Посмотреть сообщение
Но как быть с минусами и плюсами хотелось бы чтоб массив приобрел вид положительных и отрицательных чисел, а не отображение их в таком виде.
Зачем вам это всё?
Atma24
 Аватар для Atma24
4 / 4 / 2
Регистрация: 27.06.2013
Сообщений: 66
11.07.2013, 09:52  [ТС]     Работа с типами данных в массиве #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем вам это всё?
Сам себе придумываю задание и пытаюсь его реализовать)

Добавлено через 6 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
странное условие, либо надо убрать -1, либо сделать неравенство не строгим.
Я так подумал что если в строке символов есть последний символ конца строки он мне не нужен, вот поэтому kolich-1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 10:12     Работа с типами данных в массиве
Еще ссылки по теме:

Путаница с типами данных TCHAR и char. Какой тип данных выбрать? C++
C++ Работа со структурными типами данных
C++ Ошибка с типами данных в подпрограмме

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.07.2013, 10:12     Работа с типами данных в массиве #16
Цитата Сообщение от Atma24 Посмотреть сообщение
Я так подумал что если в строке символов есть последний символ конца строки он мне не нужен, вот поэтому kolich-1
Просто принято, если функция работает с массивом, то передавать размер, с которым можно (а в большинстве случаев и нужно) работать.
Yandex
Объявления
11.07.2013, 10:12     Работа с типами данных в массиве
Ответ Создать тему
Опции темы

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