Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
1

Почему неправильно выводится массив?

30.05.2011, 15:17. Показов 4793. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не пойму... массив arr выводится неправильно, если его выводить в main.Получается что-то типа "-858993460" .В cifr он выводится нормально
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
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
/*Задан текст, состоящий из слов, записанных через запятые, и заканчивающийся точкой. 
Длина текста не больше 200 символов, могут быть использованы любые символы. 
Словом считать последовательность символов, не содержащую пробел. 
Выдать слова текста и их длины. Сформировать новую строку из слов, 
состоящих только из латинских букв, и длиной не более 7 символов. 
При этом все строчные буквы заменить на заглавные буквы. 
Найти массив сумм цифр цифровых слов.*/
 
int str_sl(char [200],char*,char*,char*[20]);
int is_latin(char* [20],int);
int cifr(char* [20],int);
char rezl[200];
 
void main()
{
    char x[200],*mslov[20];
    int i,n,cnt,arr[20],f;
    cout<<"Input string"<<endl;
    cin>>x;
    n=str_sl(x,",",".",mslov);
    for (i=0;i<n;i++)
    {
        cout<<"Word number "<<i+1<<" "<<mslov[i]<<" length  "<<strlen(mslov[i])<<endl;
    };
    cout<<endl;
    f=is_latin(mslov,n);
    if (f>0)
        cout<<"New string is "<<rezl<<"."<<endl<<endl;
    else 
        cout<<"We have no english words, who length < or = 7 in string"<<endl<<endl;
    cnt=cifr(mslov,n);
    if (cnt>0)
    {cout<<"Massive of digit's summ:"<<endl;
    for (i=0;i<cnt;i++)
        cout<<arr[i]<<endl;}
    else 
    cout<<"We have no only-digit words in string"<<endl;
    
    
}
 
//----------------------------------------------------
int str_sl(char x[200],char* rsl,char* kstr,char* mslov[20])
{int n=0;
char *adrz;
do {
adrz=strstr(x,rsl);
if (adrz==NULL)
adrz=strstr(x,kstr);
mslov[n]=new char[adrz-x];
strncpy(mslov[n],x,adrz-x);
mslov[n][adrz-x]='\0';
strcpy(x,adrz+1);
n++;
} while(strcmp(x,"")!=0);
return n;
}
 
//---------------------------------------------------------
int is_latin(char* mslov[20],int n)
{
char buk[27]="abcdefghijklmnopqrstuvwxyz";
int i=0,f=0;
for(i=0;i<n;i++) 
{
    if(strspn(mslov[i],buk)==strlen(mslov[i]) && strlen(mslov[i])<=7)       
    {strcat(rezl,strupr(mslov[i]));
    strcat(rezl," ");
    f=f+1;}
}
return f;
}
//---------------------------------------------------
int cifr(char* mslov[20],int n)
{
char cif[11]="0123456789";
int i,s,sum=0,cnt=0,arr[20];
for(i=0;i<n;i++) 
{
    if(strspn(mslov[i],cif)==strlen(mslov[i]))      
    {
        s=atoi(mslov[i]);
        while (s!=0) {sum=sum+s%10; s=s/10;}
        arr[cnt]=sum;
        cnt=cnt+1;
        sum=0;
    }
}
return cnt;
}
Добавлено через 1 час 35 минут
Может нужно чтобы функция cifr возвращала массив, а не счетчик?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2011, 15:17
Ответы с готовыми решениями:

Массив неправильно выводится
вообщем на вход подаются 0 и 1 программа должна выдавать на выходе вот такие знаки * + -...

Массив выводится неправильно
пишу в Visual Studio вот код: for(int i=0; i&lt;5; i++) { printf(&quot;Введите %d...

Неправильно выводится массив
Помогите. Я создаю массив в отдельном файле класса: char town22 = { ...

Не соображу почему не выводится массив
Код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; void...

11
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.05.2011, 15:21 2
Ты выводишь не инициализированный arr .
Я не настаиваю, но, может, стоит инициализировать?
1
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.05.2011, 15:26  [ТС] 3
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ты выводишь не инициализированный arr .
Я не настаиваю, но, может, стоит инициализировать?
я думал это
C++
1
int i,n,cnt,arr[20],f;
и есть инициализция А как это правильно сделать не подскажете?
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.05.2011, 15:28 4
Это объявление
C++
1
int arr[size]={}; //объявление+инициализация
1
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.05.2011, 15:30 5
Это объявление переменной длиной 20 интов. Заполнен массив мусором.
А теперь тебе нужно присвоить значение каждому элементу массива. Точно так же, как ты его и выводишь:
arr[номер_элемента] = нужная_тебе_циферка.

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
//объявление+инициализация
Насколько я помню, хотя бы один элемент необходимо указать ручками.
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.05.2011, 15:32 6
Ну во-первых это для примера, а во вторых
C++
1
2
3
4
5
6
7
8
diagon@shadeware:~$ cat 1.cpp
#define size 10
int main(){
    int arr[size]={};
    return 0;
}
diagon@shadeware:~$ g++ 1.cpp
diagon@shadeware:~$           //компиляция прошла успешно=)
0
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
30.05.2011, 15:34 7
думаю решением в данном примере будет объявление глобального arr[20];
вне любой функции, тогда при вызове функции cif, массив заполнится значениями и в main по идее будет уже что выводить...поправьте если я неправ
1
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.05.2011, 15:40  [ТС] 8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это объявление переменной длиной 20 интов. Заполнен массив мусором.
А теперь тебе нужно присвоить значение каждому элементу массива. Точно так же, как ты его и выводишь:
arr[номер_элемента] = нужная_тебе_циферка.

Добавлено через 1 минуту

Насколько я помню, хотя бы один элемент необходимо указать ручками.
мммм, а я думал он сам инициализируется, когда сделаю вот так
C++
1
cnt=cifr(mslov,n);
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.05.2011, 15:41  [ТС] 9
Цитата Сообщение от m1Rr0r Посмотреть сообщение
думаю решением в данном примере будет объявление глобального arr[20];
вне любой функции, тогда при вызове функции cif, массив заполнится значениями и в main по идее будет уже что выводить...поправьте если я неправ
спс, помогло
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.05.2011, 15:53 10
Цитата Сообщение от NinoZombie Посмотреть сообщение
когда сделаю вот так
Это два разных arr.
1
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
30.05.2011, 16:04 11
Deviaphan,
а теперь один и тот же =))
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.05.2011, 16:09 12
Цитата Сообщение от m1Rr0r Посмотреть сообщение
а теперь один и тот же =))
Но глобальный...
0
30.05.2011, 16:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2011, 16:09
Помогаю со студенческими работами здесь

Почему выводится весь массив
Доброго времени суток! Прошу прощения за нубский вопорс, но окончательно запутался. В указателе на...

Почему не полностью выводится массив?
Массив MyY не полностью выводится. В чем может быть проблема? Заранее спасибо. const n2max=5;...

Почему матрица выводится как обычный массив
//matriza.h #pragma once class matriza { float *b,max,s; int n,m,nom; public: matriza();...

Почему при выводе в поток char* выводится весь массив символов?
я немогу вот в чем разобраться есть : int main() { char v = &quot;Fdasda&quot;; char *p=v; cout &lt;&lt;...


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

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