Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

Не пойму... массив 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 возвращала массив, а не счетчик?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2011, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему неправильно выводится массив? (C++):

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

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

Почему выводится весь массив - C++
Доброго времени суток! Прошу прощения за нубский вопорс, но окончательно запутался. В указателе на массив хранится АДРЕС первого элемента...

Почему не полностью выводится массив? - C++
Массив MyY не полностью выводится. В чем может быть проблема? Заранее спасибо. const n2max=5; const n1max=10; class cl1 { int...

Не соображу почему не выводится массив - C++
Код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; void func( int a, int b) ...

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

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

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
//объявление+инициализация
Насколько я помню, хотя бы один элемент необходимо указать ручками.
diagon
Higher
1929 / 1195 / 49
Регистрация: 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:~$           //компиляция прошла успешно=)
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
30.05.2011, 15:34 #7
думаю решением в данном примере будет объявление глобального arr[20];
вне любой функции, тогда при вызове функции cif, массив заполнится значениями и в main по идее будет уже что выводить...поправьте если я неправ
NinoZombie
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.05.2011, 15:40  [ТС] #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это объявление переменной длиной 20 интов. Заполнен массив мусором.
А теперь тебе нужно присвоить значение каждому элементу массива. Точно так же, как ты его и выводишь:
arr[номер_элемента] = нужная_тебе_циферка.

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

Насколько я помню, хотя бы один элемент необходимо указать ручками.
мммм, а я думал он сам инициализируется, когда сделаю вот так
C++
1
cnt=cifr(mslov,n);
NinoZombie
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.05.2011, 15:41  [ТС] #9
Цитата Сообщение от m1Rr0r Посмотреть сообщение
думаю решением в данном примере будет объявление глобального arr[20];
вне любой функции, тогда при вызове функции cif, массив заполнится значениями и в main по идее будет уже что выводить...поправьте если я неправ
спс, помогло
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.05.2011, 15:53 #10
Цитата Сообщение от NinoZombie Посмотреть сообщение
когда сделаю вот так
Это два разных arr.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
30.05.2011, 16:04 #11
Deviaphan,
а теперь один и тот же =))
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.05.2011, 16:09 #12
Цитата Сообщение от m1Rr0r Посмотреть сообщение
а теперь один и тот же =))
Но глобальный...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2011, 16:09
Привет! Вот еще темы с ответами:

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

Неправильно выводится список - C++
Помогите разобраться. Почему не получается использовать связной список где не используются указатели в качестве объекта для ввода...

Стек выводится неправильно - C++
void LoadFileToStack() { FILE *file; file = fopen(&quot;file.txt&quot;, &quot;r&quot;); char p; quee* first = new quee; quee* q = 0; quee*...

Количество итераций выводится неправильно - C++
Кол-во итераций должно быть на 1 больше чем индекс элемента, но выводятся одинаковые значение. В чем ошибка? #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.05.2011, 16:09
Ответ Создать тему
Опции темы

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