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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Fatinho
1 / 1 / 0
Регистрация: 14.12.2009
Сообщений: 78
#1

Заполнение массива значениями из символьного массива - C++

03.05.2012, 01:56. Просмотров 1204. Ответов 5
Метки нет (Все метки)

есть массив символов
C++
1
char z[30000];
есть целочисленный массив
C++
1
int b[30000];
каждый символ z[i] это цифра 0-9
нужно в b[i] записать символ z[i](не код символа а сам символ)
C++
1
2
for (int i=0;i<30000;i++)
b[i]=z[i]-'0'
большинство символов записываются правильно, но часть чисел записываются как 1 или 21756 или 2710 или -28725, т.е. какие то непонятные числа
как это исправиь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 01:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение массива значениями из символьного массива (C++):

Заполнение символьного массива - C++
Когда ввожу символ все крашиться. ¯ \ _ (ツ) _ / ¯ Помогите пофиксить, пожалуйста. char* hand; char* arr = {}; ...

Заполнение массива значениями - C++
Всем привет! В результате данная программа выдает массив. Но не могу понять, почему он заполняется именно этими цифрами - от 0 до 6?...

заполнение массива начальными значениями - C++
int main() { int const a = 11; setlocale(LC_ALL,&quot;Russian&quot;); int loc = {1}; for(int i =1;i&lt;=a;i++) { std::cout&lt;&lt;...

Заполнение массива рассчитанными значениями - C++
Мне нужно заполнить массив значениями M=Sin(n), где n=1,2,3...,50. У меня в массив записывается только первое значение double s, n; ...

Заполнение массива случайными значениями в С - C++
Необходимо заполнить масив случайными значениями в диапазоне 1-9, причем они каждый раз должны быть другими, только random(9) заполняет...

Заполнение txt файла значениями из массива - C++
Добрый день! вот мне нужно заполнить txt файл значениями из массива, вот сам код #include &lt;iostream&gt; #include &quot;main.h&quot; #include...

5
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
03.05.2012, 02:40 #2
А вы точно удостоверились, что в массиве символов только и только символы диапазона ['0';'9'] ?
0
Fatinho
1 / 1 / 0
Регистрация: 14.12.2009
Сообщений: 78
03.05.2012, 02:55  [ТС] #3
Цитата Сообщение от Buckstabue Посмотреть сообщение
А вы точно удостоверились, что в массиве символов только и только символы диапазона ['0';'9'] ?
это 100%
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
03.05.2012, 03:08 #4
Тогда можете предоставить пример вашей программы?
0
Fatinho
1 / 1 / 0
Регистрация: 14.12.2009
Сообщений: 78
03.05.2012, 03:14  [ТС] #5
вот программа реализующая сложение больших чисел до 30000 знаков
она работает при отно сительно небольших входных числах
но вот например при 4000-х значном числе случается эта проблема
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream.h>
#include <stdio.h>
//using namespace std;
 
int main()
{
int p,m,k,i,N;
 
int y;
char x[30000];
char z[30000];
int a[30000];
int b[30000];
int c[30001];
FILE *fp;
fp=freopen("input.txt", "rt", stdin);
cin>>x;
cin>>z;
k=0;
m=0;
for (i=0;i<30000;i++)
{
    if (x[i]!='\0')
        k++;
    if (x[i]=='\0')
        break;
}
for (i=0;i<30000;i++)
{
    if (z[i]!='\0')
        m++;
    if (z[i]=='\0')
        break;
}
p=0;
for (i=0;i<k;i++)
    a[i]=x[i]-'0';
for (i=0;i<m;i++)
    b[i]=z[i]-'0';
if (k>=m)
    for (i=0;i<k;i++)
        c[i]=0;
else
    for (i=0;i<m;i++)
        c[i]=0;
 
if (k>m)
{
    y=m;
    for(i=k-1;i>k-m-1;i--)
    {
        if ((a[i]+b[y-1]+c[i])>9)
        {
 
            c[i]=(a[i]+b[y-1]+c[i]-10);
            c[i-1]=(1);
        }
        else
            c[i]=(a[i]+b[y-1]+c[i]);
        y--;
    }
    for (i=k-m-1;i>=0;i--)
    {
        if (((a[i]+c[i])>9) && (i>0))
        {
            c[i]=(a[i]+c[i]-10);
            c[i-1]=(1);
            continue;
        }
        if (((a[i]+c[i])>9) && (i==0))
        {
            c[i]=(a[i]+c[i]-10);
            p=1;
            continue;
        }
        if ((a[i]+c[i])<=9)
            c[i]=(a[i]+c[i]);
    }
}
if (k==m)
{
    for(i=k-1;i>=0;i--)
    {
        if (((a[i]+b[i]+c[i])>9) && (i>0))
        {
            c[i]=a[i]+b[i]+c[i]-10;
            c[i-1]=1;
            continue;
        }
        if (((a[i]+b[i]+c[i])>9) && (i==0))
        {
            c[i]=a[i]+b[i]+c[i]-10;
            p=1;
            continue;
        }
        if ((a[i]+b[i]+c[i])<=9)
            c[i]=a[i]+b[i]+c[i];
    }
}
if (k<m)
{
    y=k;
    for(i=m-1;i>m-k-1;i--)
    {
        if ((b[i]+a[y-1]+c[i])>9)
        {
            c[i]=b[i]+a[y-1]+c[i]-10;
            c[i-1]=1;
        }
        else
            c[i]=b[i]+a[y-1]+c[i];
        y--;
    }
    for (i=m-k-1;i>=0;i--)
    {
        if (((b[i]+c[i])>9) && (i>0))
        {
            c[i]=b[i]+c[i]-10;
            c[i-1]=1;
            continue;
        }
        if (((b[i]+c[i])>9) && (i==0))
        {
            c[i]=b[i]+c[i]-10;
            p=1;
            continue;
        }
        if ((b[i]+c[i])<=9)
            c[i]=b[i]+c[i];
    }
}
cout<<"\n";
if (k>=m)
{
    if (p==1)
    {
        //printf("%d",p);
                cout<<p;
        for (i=0;i<k;i++)
            printf("%d",c[i]);
        }
    else
        for (i=0;i<k;i++)
            //printf("%d",c[i]);
                        cout<<c[i];
}
else
    if (p==1)
    {
        printf("%d",p);
        for (i=0;i<m;i++)
            printf("%d",c[i]);
    }
    else
        for (i=0;i<m;i++)
            printf("%d",c[i]);
 
 
 
}
0
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
03.05.2012, 03:54 #6
не знаю, не знаю, наверное в формате файла где ошибка, но в вашей программе очень много где опасных мест, допустим для массива "c" вроде не задана максимальная длина и много много чего. Вообще почитайте в интернете про длинную арифметику, гораздо проще реализовывать её алгоритмы когда число находится в массиве в перевернутом виде, т.е. вначале идут единицы, затем десятки и т.д. при таком подходе хватает и двух массивов
0
03.05.2012, 03:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 03:54
Привет! Вот еще темы с ответами:

Заполнение целого массива случайными значениями - C++
1.Написать программу, организующую заполнение целого массива из n элементов случайными значениями (n – целая переменная или константа) и...

Написать программу, организующую заполнение целого массива из n элементов случайными значениями - C++
Написать программу, организующую заполнение целого массива из n элементов случайными значениями (n – целая переменная) и корректный вывод...

Написать программу, организующую заполнение целого массива из n элементов случайными значениями - C++
Помогите пожалуйста, правильно ли я делаю? вызов функции вещественного массива не получается ...

Заменить элементы массива со значениями в заданном интервале на среднее арифметическое значение массива - C++
В одномерном массиве A (n) заменить элементы меньше заданного K и больше от заданного L на среднее арифметическое значение массива, где 0...


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

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

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