Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
1

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

10.07.2013, 15:00. Показов 961. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток , помогите выяснить одну вещь.
Есть у меня массив типа char.
Вот к примеру {1f-21df }
Каким образом можно преобразовать тип элементов массива в int, чтобы в нем можно было работать как с типом int.
Заранее спс всем за понимание.

Добавлено через 43 секунды
Ой ну и конечно буковки то откинуть.....
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2013, 15:00
Ответы с готовыми решениями:

Работа с короткими типами данных
Здраствуйте! Не занимался (и не планирую скоро) АРМами. Не хочу лезть в даташиты, хотя там ответ...

Работа со структурными типами данных
В списке содержится информация о владельцах гаражного кооператива: индивидуальный номер, фамилия,...

Работа с комбинированными типами данных
1. Описать, используя структуру данных запись, телефонную книгу. Составить программу, выдающую...

Работа с разными типами данных
Вот написал код, который выводит таблицу Пифагора :using System; namespace Cons { class...

15
154 / 110 / 9
Регистрация: 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, поэтому конвертация типов в пятой строке не понадобится.
2
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
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) в текущей кодировке

Не по теме:

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

1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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.
2
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
10.07.2013, 18:06 5
Цитата Сообщение от Tulosba Посмотреть сообщение
nt'у не обязательно участвовать в вычислениях
Да, правильнее было бы сказать "приводится к типу int везде где ожидается тип int", но я подумал, что в данном случае так понятнее.
0
154 / 110 / 9
Регистрация: 12.06.2013
Сообщений: 168
10.07.2013, 18:40 6
Цитата Сообщение от Tulosba Посмотреть сообщение
Приведение типов (то, что Вы назвали "конвертацией") будет производится всё равно
Я имел в виду явное приведение. Но с вами согласен.
0
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
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" выводиться не то что ожидается. Подскажите в чем может быть ошибка.
Изображения
 
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:05 8
Цитата Сообщение от Atma24 Посмотреть сообщение
При выводе массива "b" выводиться не то что ожидается.
А что ожидалось?
0
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
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();
}
Подскажите пожалуйста как работать со знаками плюс и минус?
Миниатюры
Работа с типами данных в массиве  
0
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
11.07.2013, 09:07  [ТС] 10
Цитата Сообщение от alsav22 Посмотреть сообщение
А что ожидалось?
ожидал что "12345" ,будет)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:19 11
C++
1
std::cout<<static_cast<int>(b[i])<<" ";
Зачем int к int приводите?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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/
0
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
11.07.2013, 09:42  [ТС] 13
Цитата Сообщение от Atma24 Посмотреть сообщение

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

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

Добавлено через 6 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
странное условие, либо надо убрать -1, либо сделать неравенство не строгим.
Я так подумал что если в строке символов есть последний символ конца строки он мне не нужен, вот поэтому kolich-1
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.07.2013, 10:12 16
Цитата Сообщение от Atma24 Посмотреть сообщение
Я так подумал что если в строке символов есть последний символ конца строки он мне не нужен, вот поэтому kolich-1
Просто принято, если функция работает с массивом, то передавать размер, с которым можно (а в большинстве случаев и нужно) работать.
1
11.07.2013, 10:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2013, 10:12
Помогаю со студенческими работами здесь

Работа со структурными типами данных
Задание: В файле записан массив A(nxm) целых чисел. Структура файла следующая: сначала хранится n...

Работа с комбинированными типами данных
Нужна помощь в выполнение заданий&gt; 1) Вычислить средний балл группы и распечатать список...

Работа с числовыми типами данных
Уважаемые знатоки c#, очень нужна ваша помощь. Есть ли какой-то тип переменных который может...

Работа со строковыми типами данных
Всем доброе время суток! Помогите разобраться, я слегка запутался.. var A :TStringList; ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru