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

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

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

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

Добавлено через 43 секунды
Ой ну и конечно буковки то откинуть.....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2013, 15:00
Ответы с готовыми решениями:

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

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

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

15
154 / 110 / 9
Регистрация: 12.06.2013
Сообщений: 168
10.07.2013, 15:08
Цитата Сообщение от 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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.07.2013, 15:10
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
Цитата Сообщение от zenw Посмотреть сообщение
int более вместительный тип, чем char, поэтому конвертация типов в пятой строке не понадобится.
Приведение типов (то, что Вы назвали "конвертацией") будет производится всё равно. Другое дело, что потери точности в данном случае не будет.
Цитата Сообщение от Atma24 Посмотреть сообщение
чтобы в нем можно было работать как с типом int.
Можно прямо в месте использования написать:
C++
1
static_cast<int>(c); // c - типа char.
Например такую конструкцию можно использовать, когда нужно вывести код символа на консоль.
Цитата Сообщение от IGPIGP Посмотреть сообщение
а также в арифметических операциях c типом int
int'у не обязательно участвовать в вычислениях. Например, результат умножения двух char'в тоже будет int.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.07.2013, 18:06
Цитата Сообщение от Tulosba Посмотреть сообщение
nt'у не обязательно участвовать в вычислениях
Да, правильнее было бы сказать "приводится к типу int везде где ожидается тип int", но я подумал, что в данном случае так понятнее.
0
154 / 110 / 9
Регистрация: 12.06.2013
Сообщений: 168
10.07.2013, 18:40
Цитата Сообщение от Tulosba Посмотреть сообщение
Приведение типов (то, что Вы назвали "конвертацией") будет производится всё равно
Я имел в виду явное приведение. Но с вами согласен.
0
 Аватар для Atma24
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
11.07.2013, 07:17  [ТС]
Цитата Сообщение от 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
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:05
Цитата Сообщение от Atma24 Посмотреть сообщение
При выводе массива "b" выводиться не то что ожидается.
А что ожидалось?
0
 Аватар для Atma24
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
11.07.2013, 09:05  [ТС]
Цитата Сообщение от 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
 Аватар для Atma24
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
11.07.2013, 09:07  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
А что ожидалось?
ожидал что "12345" ,будет)
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 09:19
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

Не по теме:

Цитата Сообщение от 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
 Аватар для Atma24
6 / 6 / 4
Регистрация: 27.06.2013
Сообщений: 89
11.07.2013, 09:42  [ТС]
Цитата Сообщение от Atma24 Посмотреть сообщение

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

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

Добавлено через 6 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
странное условие, либо надо убрать -1, либо сделать неравенство не строгим.
Я так подумал что если в строке символов есть последний символ конца строки он мне не нужен, вот поэтому kolich-1
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.07.2013, 10:12
Цитата Сообщение от Atma24 Посмотреть сообщение
Я так подумал что если в строке символов есть последний символ конца строки он мне не нужен, вот поэтому kolich-1
Просто принято, если функция работает с массивом, то передавать размер, с которым можно (а в большинстве случаев и нужно) работать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2013, 10:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru