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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.77
Jekanchik
2 / 2 / 0
Регистрация: 10.10.2009
Сообщений: 23
#1

Преобразовать сроку чисел CHAR в массив чисел типа int - C++

10.10.2009, 18:37. Просмотров 7161. Ответов 16
Метки нет (Все метки)

Помогите реализовать идею...
Прегнать введённую сроку чисел char в массив int ...
чтоб элемент char str[i] соответсвовал int mas[i]....

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
char chi[100];
int i,n,*mas;
cout<<"Vvedite chislo 1 = ";cin>>chi;
n=strlen(chi);
mas=new int[n];
 
for(i=0; i<n; i++){ { mas[i]=atoi(chi[i]);} }                                     
 
for (i=0; i<n; i++)
{ printf("%3d",mas[i]);}
getch();
}
не знаю как обойти ошибку....
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2009, 18:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать сроку чисел CHAR в массив чисел типа int (C++):

Определите объединения, элементами которого являются массивы из трех чисел типа long и с шести чисел типа int - C++
Определите объединения, элементами которого являются массивы из трех чисел типа long и с шести чисел типа int. Значение элементов...

8-и значное число типа int преобразовать в строчку char\string - C++
Подскажите, есть ли какая-нибудь функция, которая загоняет число в строчку. Например есть 8-и значное число (тип int) и мне нужно его...

Динамический массив из n чисел типа int. - C++
БИЛЕТ №22 3. Напишите программу, которая выполняет следующие действия: 1) определяет динамический массив из n чисел типа int; 2)...

Передать массив чисел типа Int функции - C++
Всем привет. Столкнулся с проблемой передачи числового массива функции. Этот код изменяет исходный массив. Как сделать так, чтобы при...

Перевести строку типа char в массив типа int - C++
Задание : В текстовом файле INPUT.TXT записаны целые числа через пробел, возможно, в несколько строк. За один просмотр файла сформировать...

Как преобразовать строку char в массив int? - C++
Дана строка символов S, состоящая из чисел, разделенных пробелами Нужно выделить числа и засунуть их в массив типа int; Как можно это...

16
HIMen
4147 / 1396 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
10.10.2009, 18:49 #2
C++
1
for(i=0; i<n; i++){ { mas[i]=(chi[i])-48;} }
2
Jekanchik
2 / 2 / 0
Регистрация: 10.10.2009
Сообщений: 23
10.10.2009, 18:53  [ТС] #3
Спасибо работает))) а что есть 48 ...это разница в памяти?
0
HIMen
4147 / 1396 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
10.10.2009, 18:56 #4
нет, char это тоже целочисленный тип, он хранит не символ, а его код.
нулю соответсвует 48, 1 - 49, и т.д. 9 - 57.
поэтому вычитаем 48
2
Вложения
Тип файла: pdf ascii.pdf (339.7 Кб, 952 просмотров)
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 18:58 #5
0. а вдруг ввели не число?
1. atoi() принимает в качестве параметра указатель на строку символов, а ты ей что даешь?
0
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 18:58 #6
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
void main()
{
    char chi[256];
    int n,mas;
 
    cout<<"Vvedite chislo 1 = ";
    cin>>chi;
    
    short numSize=strlen(chi);
 
    int*p=new int[numSize];
 
    
    char ch;
    
    for(int i=0;i<numSize;i++)
    {
        ch=*(chi+i);
        p[i]=atoi(&ch);
    }
 
    cout<<"int :";
    for(i=0;i<numSize;i++)
        cout<<p[i];
 
    cout<<endl;
 
 
    cout<<"char :";
        cout<<chi;
 
    cout<<endl;
 
    
    system("pause");
}
ili tak.
0
Jekanchik
2 / 2 / 0
Регистрация: 10.10.2009
Сообщений: 23
10.10.2009, 19:01  [ТС] #7
Во я дерево....я проспал эту лекцию...спасибо...и за таблицу тоже...

Добавлено через 1 минуту
Цитата Сообщение от novi4ok Посмотреть сообщение
0. а вдруг ввели не число?
1. atoi() принимает в качестве параметра указатель на строку символов, а ты ей что даешь?
у меня по умолчанию вводить надо числа поэтому ввод букв исключен..
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 19:03 #8
Цитата Сообщение от CAYOT Посмотреть сообщение
C++
1
        p[i]=atoi(&ch);
ili tak.
и не так. вообрази себе, что в памяти, следующей за ch находится нечто вроде "0х3234с4..."? тогда, если твоя ch будет иметь значение, например, '3', ф-я вернет число 324
0
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 19:09 #9
ну я считал что в матрице чаров нету ничего кроме цифр...

Добавлено через 1 минуту
pri'
Vvedite chislo 1 = 0x234c234
int :002340234
char :0x234c234
Для продолжения нажмите любую клавишу . . .

Добавлено через 1 минуту
vixodit v atoi est kakoito if..chto esli eto ne cifra ona preobrazueca v 0..
0
Jekanchik
2 / 2 / 0
Регистрация: 10.10.2009
Сообщений: 23
10.10.2009, 19:10  [ТС] #10
Всем спасибо всё работает....будут проблемки отпишусь...
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 19:10 #11
Цитата Сообщение от CAYOT Посмотреть сообщение
ну я считал что в матрице чаров нету ничего кроме цифр...
какая "матрица чаров"? вы определили переменную ch где-то в памяти. за ней непосредственно тоже что-то в памяти находится. вы не знаете что.
0
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 19:16 #12
ch eto
char ch;
esli vvodit toko cifri vse pravilno..scopirui i ubedis sam!.
ia ojidayu cifru tipa char...esli eto ne cifra to avtomatom atoi menyaet ee na 0...
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 20:31 #13
Цитата Сообщение от CAYOT Посмотреть сообщение
ch eto
char ch;
esli vvodit toko cifri vse pravilno..scopirui i ubedis sam!.
ia ojidayu cifru tipa char...esli eto ne cifra to avtomatom atoi menyaet ee na 0...
уже дважды объяснил. вроде "на пальцах". попробую еще раз, если не поймешь, больше не буду пытаться.

это не имеет никакого отношения к тому, что введут.

ты пишешь:
C++
1
char ch;
потом -
C++
1
p[i]=atoi(&ch);
и ф-я пытается преобразовать в целое нечто, лежащее по адресу переменной ch. а там находится переменная ch длиной один байт, а за ней - что-то, чего ты не знаешь. а в этой памяти вполне могут содержаться значения, соответствующие символам цифр. понятно?

если уже хочешь так действовать, то определи массив длиной два, и во второй забей ноль (или просто нецифру), а в первый - помещай то что хочешь преобразовать в целое.

C++
1
2
3
4
5
char ch[2];
*(ch+1) = '\x00';
...
*ch=*(chi+i);
p[i]=atoi(ch);
тогда все будет работать "по-честному".
0
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 21:48 #14
a mne vooshe ne interesuet chto za moim peremennim...f-ya pralno smotrit vnutri tolko etoi peremennoi..ia uje 5 minut probuyu oshibku poluchit nekak..
0
Jekanchik
2 / 2 / 0
Регистрация: 10.10.2009
Сообщений: 23
11.10.2009, 12:34  [ТС] #15
Еще такая вот проблема сложить эти два массива по элементам и записать в 3-ий
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
48
49
50
51
52
53
54
55
56
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
 
int main()
{
char chi[300],chi2[300];int i,j,k,n,m; float a;int mas[300];
int sum;
int kol;
cout<<"Vvedite chislo 1 = ";cin>>chi;   //vvod pervogo chisla
n=strlen(chi);
for(i=0; i<n; i++)       // preobrazovanie
{ mas[i]=(chi[i])-48;}
 
 for (i=0;n-1-i>i;i++)     // perevorot massiva
      {mas[n-1-i]=mas[i]+mas[n-1-i];
       mas[i]=mas[n-1-i]-mas[i];
       mas[n-i-1]=mas[n-1-i]-mas[i];}
 
int mas2[300];
cout<<"Vvedite chislo 2 = ";cin>>chi2;       // vvod vtorogo
m=strlen(chi2);
                               //preobrazovanie
for(j=0; j<m; j++)
{ mas2[j]=(chi2[j])-48;}
 
for (j=0;m-1-j>j;j++)     // perevorot massiva
      {mas2[m-1-j]=mas2[j]+mas2[m-1-j];
       mas2[j]=mas2[m-1-j]-mas2[j];
       mas2[m-j-1]=mas2[m-1-j]-mas2[j];}
 
int mas3[20];
for (k=0; k<n; k++)
    {
    mas3[k]=mas[i]+mas2[j];
    kol++;
   if (mas3[k]>10) {mas3[k]=fmod(mas3[k],10); mas3[k+1]=mas3[k+1]+1;}
      cout<<mas3[k];
     }
 
cout<<"\n"<<"Pervoe "<<"\n";
for (i=0; i<n; i++)
{ printf("%1d",mas[i]); }
cout<<"\n"<<"Vtoroe "<<"\n";
for (j=0; j<m; j++)
{ printf("%1d",mas2[j]);}
cout<<"\n";
 
//for (k=0; i<kol; k++)
//{ printf("%3d",mas3[k]); }
cout<<"\n";
getch();
}
где я опять забочинил
0
11.10.2009, 12:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2009, 12:34
Привет! Вот еще темы с ответами:

Написать класс сверхбольших целых чисел, использовать массив типа char - C++
Задача: написать класс сверхбольших чисел ( нет ограничений на количество цифр ) использовать массив типа char, реализовать основные...

Создать динамический двумерный массив типа int. Ввести таблицу из 5x5 чисел. Полсчитать количество положительн - C++
Создать динамический двумерный массив типа int. Ввести таблицу из 5x5 чисел. Полсчитать количество положительных чисел в каждой строке.

не получается преобразовать дату(как массив типа char) в число... - C++
Из файла считывается дата в виде символьного массива типа char,далее мне нужно преобразовать ее в числовой массив типа int. я пытаюсь...

Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел - C++
Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел типа float, что не больше...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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