Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/259: Рейтинг темы: голосов - 259, средняя оценка - 4.63
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2

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

18.11.2011, 22:02. Показов 50468. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.11.2011, 22:02
Ответы с готовыми решениями:

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

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

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

14
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
18.11.2011, 22:06
для массива:
C++
1
std::cout << sizeof ( a ) / sizeof ( *a ) << std::endl;
для строки
C++
1
s.length();
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:08
Пардон, где массив объявлен?
0
 Аватар для KeyGen
388 / 295 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
18.11.2011, 22:17
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  [ТС]
Так пока тут наплыло кучу ответов, я нашел ошибки и попытался их исправить вот конечный код:
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
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
18.11.2011, 22:35
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  [ТС]
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от 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
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
18.11.2011, 22:47
deleted.

Не по теме:

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

0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 22:53  [ТС]
Скорей "спасибо" но все равно код не тот(
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 22:59
Если условие, которое предоставлено в посте #1 конечное(т.е. не является частью другой программы, в которой нужны данные массива), то я вообще не вижу смысла заводить массив. Просто счетчик.
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
18.11.2011, 23:08  [ТС]
само задание которое я хочу воплотить это написание как бы стек описав в классах всего лишь 4 функции Push() Pop() Top() isEmpty() для чего собственно и нужно знать кол-во элементов в однородном не определенном массиве
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.11.2011, 23:15
Не парьтесь. Чуть-чуть под себя подгоните и будет конфетка
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  [ТС]
Это все конечно не плохо но мне бы хотелось написать фун-ции самому, вернемся к вопросу о массиве
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.11.2011, 00:03
Используйте еще одну переменную для размера. Ибо через sizeof(arr) / sizeof(T) вы ничего не добьетесь толкового, надеюсь, вы это пониаете.
Как вариант - еще раз прогнать массив до нуля, но это плохой вариант. К тому же, раз вы хотите использовать классы, то с переменной самый простой вариант.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2011, 00:03
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru