85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
1

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

18.11.2011, 22:02. Показов 48800. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток

Задача:
Пользователь вводит числа или текст, когда введет '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;
Не подходит, нужно именно как то найти длину.
Заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2011, 22:02
Ответы с готовыми решениями:

Синонимы операций взятия адреса массива (arr и &arr)
возможно коряво написал заголовок, да и сам вопрос банальный. после создании лок. массива его адрес...

Почему *arr И arr[] одинаковые, но в тоже время разные?
Например есть какая-то ф-я:void temp(int &amp;(*arr)) { // . . . } И 2 разных массива которые...

чем отличается *(arr+1) от *(arr++)?
подскажите пожалуйста в чем отличие между *(arr+1) и *(arr++), допустим char arr=&quot;qwertyuiop&quot;;...

Объявление массива int *arr почему так
Объявление массива int *arr почему так, а не int arr, что означает *

14
541 / 446 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
18.11.2011, 22:06 2
для массива:
C++
1
std::cout << sizeof ( a ) / sizeof ( *a ) << std::endl;
для строки
C++
1
s.length();
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:08 3
Пардон, где массив объявлен?
0
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
18.11.2011, 22:17 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;
}
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:34  [ТС] 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
0
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
18.11.2011, 22:35 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;
}
1
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:36  [ТС] 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, а должно кол эл. в массиве
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:45  [ТС] 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;
}
Так я смотрю Дело набирает оборот Забыл вставить условие: без использования "Векторов" "Стеков" и т.д
0
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
18.11.2011, 22:47 9
deleted.

Не по теме:

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

0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:53  [ТС] 10
Скорей "спасибо" но все равно код не тот(
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:59 11
Если условие, которое предоставлено в посте #1 конечное(т.е. не является частью другой программы, в которой нужны данные массива), то я вообще не вижу смысла заводить массив. Просто счетчик.
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 23:08  [ТС] 12
само задание которое я хочу воплотить это написание как бы стек описав в классах всего лишь 4 функции Push() Pop() Top() isEmpty() для чего собственно и нужно знать кол-во элементов в однородном не определенном массиве
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 23:15 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;
}
1
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 23:36  [ТС] 14
Это все конечно не плохо но мне бы хотелось написать фун-ции самому, вернемся к вопросу о массиве
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.11.2011, 00:03 15
Используйте еще одну переменную для размера. Ибо через sizeof(arr) / sizeof(T) вы ничего не добьетесь толкового, надеюсь, вы это пониаете.
Как вариант - еще раз прогнать массив до нуля, но это плохой вариант. К тому же, раз вы хотите использовать классы, то с переменной самый простой вариант.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2011, 00:03
Помогаю со студенческими работами здесь

Найти длину массива
Почему этот код нахождения длины массива не работает? #include &lt;iostream&gt; using namespace...

Найти элементы строкового массива имеющие наименьшую длину
Дано текстовый массив А $ (10) .Найти и напечатать элементы наименьшей длины. Вывести на печать...

Найти длину самой длинной последовательности подряд идущих нулевых элементов массива
Задан числовой массив A(n). Найти длину самой длинной последовательности подряд идущих элементов...

Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю
Задан одномерный массив. Найти длину самой длинной последовательности подряд идущих элементов...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru