Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/88: Рейтинг темы: голосов - 88, средняя оценка - 4.92
Jazz411
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
1

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

18.11.2011, 22:02. Просмотров 16686. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 22:02
Ответы с готовыми решениями:

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

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

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

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

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

14
Mиxaил
534 / 439 / 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
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:08 3
Пардон, где массив объявлен?
0
KeyGen
384 / 291 / 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
Jazz411
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
Dekio
Фрилансер
Эксперт С++
5838 / 1219 / 499
Регистрация: 23.11.2010
Сообщений: 3,377
Записей в блоге: 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
Jazz411
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
Jazz411
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
Dekio
Фрилансер
Эксперт С++
5838 / 1219 / 499
Регистрация: 23.11.2010
Сообщений: 3,377
Записей в блоге: 1
18.11.2011, 22:47 9
deleted.

Не по теме:

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

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

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

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

Почему работает и так, и так: arr[i] и i[arr]?
//один и тот же результат cout&lt;&lt;arr; cout&lt;&lt;i;//почему нет ошибки да даже...


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

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

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