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

Найти длину массива arr[] - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 89, средняя оценка - 4.87
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:02     Найти длину массива arr[] #1
Доброго времени суток

Задача:
Пользователь вводит числа или текст, когда введет '0' то ему выдаст кол-во элементов в массиве.

Вопрос:
Как найти длину массива arr[] в столь простой функции:
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
#include <stack>
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std ;
int main()
{
string a;
    for(int i;;i++)
    {
        cout<<"Enter Value"<<endl;
        getline(cin, a);
        if(a!="0")
        {
            arr[i]=a;
        }
        else
        {
            cout<<"Dlina massiva =";
            system("cls");
            break;
        }
        system("cls");
    }
}
Ответ:
C++
1
            cout<<"Dlina massiva ="<<i<<endl;
Не подходит, нужно именно как то найти длину.
Заранее благодарен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
18.11.2011, 22:06     Найти длину массива arr[] #2
для массива:
C++
1
std::cout << sizeof ( a ) / sizeof ( *a ) << std::endl;
для строки
C++
1
s.length();
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:08     Найти длину массива arr[] #3
Пардон, где массив объявлен?
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
18.11.2011, 22:17     Найти длину массива arr[] #4
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    cout << "Ender text: ";
    
    char ch;
    char mas[40];
    int i=0;
    
    while (i<100)
    {
          cin.get(ch);
          mas[i]=ch;
          i++;
          if(ch=='0')
          break;
    }
          
          cout << "Size: " << i-1;
 
    
    system("pause");
    return 0;
}
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:34  [ТС]     Найти длину массива arr[] #5
Так пока тут наплыло кучу ответов, я нашел ошибки и попытался их исправить вот конечный код:
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
#include <stack>
#include <string>
#include <iostream>
#include <Windows.h>
#include <process.h>
using namespace std ;
int arr[];
int main()
{
    int a;
    for(int i=0;;i++)
    {
        cout<<"Enter Value"<<endl;
        cin>>a;//getline(cin, a);
        if(a!=0)
        {
            arr[i]=a;
        }
        else
        {
            cout<<"Dlina massiva =" << endl;
            //system("cls");
            break;
        }
        //system("cls");
    }
}
При замене
C#
1
cout<<"Dlina massiva =" << endl;
на
C#
1
cout<<"Dlina massiva =" << sizeof ( arr ) / sizeof ( *arr ) << endl;
вылетает ошибка
error C2070: int []: недопустимый оператор sizeof
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
18.11.2011, 22:35     Найти длину массива arr[] #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <vector>
 
int main()
{
    std::string Str;
    std::vector <std::string> vec;
    std::cin>>Str;
    while(Str!="0")
    {    
        vec.push_back(Str);
        std::cin>>Str;
    }
    std::cout<<"Size = "<<vec.size()<<std::endl;
    system("pause");
    return 0;
}
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:36  [ТС]     Найти длину массива arr[] #7
Цитата Сообщение от KeyGen Посмотреть сообщение
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    cout << "Ender text: ";
    
    char ch;
    char mas[40];
    int i=0;
    
    while (i<100)
    {
          cin.get(ch);
          mas[i]=ch;
          i++;
          if(ch=='0')
          break;
    }
          
          cout << "Size: " << i-1;
 
    
    system("pause");
    return 0;
}
Заметь в ответ выводится i, а должно кол эл. в массиве
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:45  [ТС]     Найти длину массива arr[] #8
Цитата Сообщение от Dekio Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <vector>
 
int main()
{
    std::string Str;
    std::vector <std::string> vec;
    std::cin>>Str;
    while(Str!="0")
    {    
        vec.push_back(Str);
        std::cin>>Str;
    }
    std::cout<<"Size = "<<vec.size()<<std::endl;
    system("pause");
    return 0;
}
Так я смотрю Дело набирает оборот Забыл вставить условие: без использования "Векторов" "Стеков" и т.д
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
18.11.2011, 22:47     Найти длину массива arr[] #9
deleted.

Не по теме:

Нужно сразу писать без ошибок, что бы не было лишних вопросов

Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:53  [ТС]     Найти длину массива arr[] #10
Скорей "спасибо" но все равно код не тот(
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:59     Найти длину массива arr[] #11
Если условие, которое предоставлено в посте #1 конечное(т.е. не является частью другой программы, в которой нужны данные массива), то я вообще не вижу смысла заводить массив. Просто счетчик.
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 23:08  [ТС]     Найти длину массива arr[] #12
само задание которое я хочу воплотить это написание как бы стек описав в классах всего лишь 4 функции Push() Pop() Top() isEmpty() для чего собственно и нужно знать кол-во элементов в однородном не определенном массиве
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 23:15     Найти длину массива arr[] #13
Не парьтесь. Чуть-чуть под себя подгоните и будет конфетка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//stack.h
#ifndef STACK_H
#define STACK_H
 
template <typename T>
class Stack
{
public:
    Stack();
    Stack(int); 
    ~Stack();
    void push(T);
    T pop();
    int getSize();
    
private:
    T *stack;
    int size;
    int count;
};
 
#endif
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
//stack.cpp
#include <iostream>
#include <iomanip>
#include "stack.h"
 
const int STEP = 10;
 
template <typename T>
Stack<T>::Stack() : size(STEP), count(0)
{
    stack = new T [size];
}
 
template <typename T>
Stack<T>::Stack(int n) : size(n), count(0)
{
    stack = new T [size];
}
 
template <typename T>
Stack<T>::~Stack()
{
    delete[] stack;
}
 
template <typename T>
void Stack<T>::push(T num)
{
    if(++count != size)
        stack[count - 1] = num;
    else
    {
        T *buf = new T [size + STEP];
        for(int i = 0; i < size; ++i)
            buf[i] = stack[i];
        delete[] stack;
        stack = new T [size + STEP];
        for(int i = 0; i < size; ++i)
            stack[i] = buf[i];
        delete[] buf;
        size += STEP;
        stack[count - 1] = num;
    }
}
 
template <typename T>
T Stack<T>::pop()
{
    return stack[--count];
}
 
template <typename T>
int Stack<T>::getSize()
{
    return count;
}
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 23:36  [ТС]     Найти длину массива arr[] #14
Это все конечно не плохо но мне бы хотелось написать фун-ции самому, вернемся к вопросу о массиве
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2011, 00:03     Найти длину массива arr[]
Еще ссылки по теме:

C++ синонимы операций взятия адреса массива (arr и &arr)
чем отличается *(arr+1) от *(arr++)? C++
Найти длину самой длинной последовательности подряд идущих нулевых элементов массива C++

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

Или воспользуйтесь поиском по форуму:
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.11.2011, 00:03     Найти длину массива arr[] #15
Используйте еще одну переменную для размера. Ибо через sizeof(arr) / sizeof(T) вы ничего не добьетесь толкового, надеюсь, вы это пониаете.
Как вариант - еще раз прогнать массив до нуля, но это плохой вариант. К тому же, раз вы хотите использовать классы, то с переменной самый простой вариант.
Yandex
Объявления
19.11.2011, 00:03     Найти длину массива arr[]
Ответ Создать тему
Опции темы

Текущее время: 21:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru