Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.77
Jekanchik
2 / 2 / 1
Регистрация: 10.10.2009
Сообщений: 23
#1

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

10.10.2009, 18:37. Просмотров 8057. Ответов 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
Определите объединения, элементами которого являются массивы из трех чисел типа...

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

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

Передать массив чисел типа Int функции
Всем привет. Столкнулся с проблемой передачи числового массива функции. Этот...

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

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

16
HIMen
4251 / 1418 / 101
Регистрация: 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 / 1
Регистрация: 10.10.2009
Сообщений: 23
10.10.2009, 18:53  [ТС] #3
Спасибо работает))) а что есть 48 ...это разница в памяти?
0
HIMen
4251 / 1418 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
10.10.2009, 18:56 #4
нет, char это тоже целочисленный тип, он хранит не символ, а его код.
нулю соответсвует 48, 1 - 49, и т.д. 9 - 57.
поэтому вычитаем 48
2
Вложения
Тип файла: pdf ascii.pdf (339.7 Кб, 1002 просмотров)
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 18:58 #5
0. а вдруг ввели не число?
1. atoi() принимает в качестве параметра указатель на строку символов, а ты ей что даешь?
0
CAYOT
0 / 0 / 1
Регистрация: 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 / 1
Регистрация: 10.10.2009
Сообщений: 23
10.10.2009, 19:01  [ТС] #7
Во я дерево....я проспал эту лекцию...спасибо...и за таблицу тоже...

Добавлено через 1 минуту
Цитата Сообщение от novi4ok Посмотреть сообщение
0. а вдруг ввели не число?
1. atoi() принимает в качестве параметра указатель на строку символов, а ты ей что даешь?
у меня по умолчанию вводить надо числа поэтому ввод букв исключен..
0
novi4ok
551 / 504 / 25
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 10.10.2009
Сообщений: 23
10.10.2009, 19:10  [ТС] #10
Всем спасибо всё работает....будут проблемки отпишусь...
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 19:10 #11
Цитата Сообщение от CAYOT Посмотреть сообщение
ну я считал что в матрице чаров нету ничего кроме цифр...
какая "матрица чаров"? вы определили переменную ch где-то в памяти. за ней непосредственно тоже что-то в памяти находится. вы не знаете что.
0
CAYOT
0 / 0 / 1
Регистрация: 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 / 25
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 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
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
11.10.2009, 12:54 #16
Jekanchik,

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

char ch[10];
int arr[10];
std::copy(ch, ch+10, arr);
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.10.2009, 14:41 #17
Цитата Сообщение от CAYOT Посмотреть сообщение
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..
ф-я "смотрит", начиная с адреса этой переменной, и пока не встретит нецифру. попробуй вот так, и увидишь, куда ф-я "смотрит":

C++
1
2
3
4
5
6
7
8
9
10
11
    struct s {
        char _ch;
        char _ch2;
    };
 
    s ss;
    ss._ch = '3';
    ss._ch2 = 'a';
    int a = ::atoi (&ss._ch);
    ss._ch2 = '5';
    int b = ::atoi (&ss._ch);
здесь ss._ch - тоже переменная типа char. я ее вставил в структуру, чтобы иметь возможность определять, что находится в памяти за этой переменной. посмотри какие значения получат a, b. может поймешь наконец.
0
11.10.2009, 14:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2009, 14:41
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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