I am doing a project for my computer science one course and I am having trouble trying to get the exact size of an array that contains char values. First off the program prompts the user to enter the char values, by using the line cin.getline(array,100);
Afterwards, it takes the array and then passes it a getSize function that is suppose to return the actual size of the array. The only problem is that it is not inconsistent. Sometimes it returns the right value, but other times it doesn’t.
getSize function :
int getSize(char arr[]){
int i = 0;
for(i; '' != arr[i];i++){
}
return i;
}
Example:
arr[100] contains 5 characters and the rest are null, but the function returns 7 when the program runs. I am not sure if this is an issue, but the program modifies the array before sending it to the size function. It removes the duplicates.
asked Oct 31, 2013 at 4:53
8
Since you’re dealing with arrays, use the strlen function
strlen(array);
Note that there’s also a getline overload for strings that’s more C++ like (object oriented etc)
std::string line;
std::getline(std::cin, line);
size_t len = line.length();
answered Oct 31, 2013 at 5:25
nishantjrnishantjr
1,7781 gold badge15 silver badges39 bronze badges
template<size_t t_size>
size_t GetRealSize(const char (&str)[t_size])
{
return std::count_if(&str[0], &str[t_size], [](char c) { return !!c; });
}
This might be what you want.
answered Oct 31, 2013 at 5:01
xmllmxxmllmx
39.3k25 gold badges156 silver badges320 bronze badges
3
This can’t be done with pointers alone. Pointers contain no information about the size of the array — they are only a memory address. Because arrays decay to pointers when passed to a function, you lose the size of the array.
One way is to use Templates
template <typename T, size_t N>
size_t array(const T (&buffer)[N])
{
cout << "size: " << N << endl;
return N;
}
You can then call the function like this (just like any other function):
int main()
{
char a[10];
array(a);
}
Output:
size: 10
answered Oct 31, 2013 at 5:02
LingaLinga
10.3k10 gold badges52 silver badges104 bronze badges
1
you can easily use sizeof()
operator to get size,…
if you have char a[10];
use
int size=sizeof(a);
answered Oct 31, 2013 at 5:28
RaonRaon
1,2463 gold badges12 silver badges25 bronze badges
5
Формулировка задачи:
Разработать алгоритм программы, которая вводит последовательность
из N чисел, считает количество ненулевых элементов и выводит номера этих элементов .
Код к задаче: «Найти количество ненулевых элементов массива и вывести их номера»
textual
Листинг программы
uses crt; const n=10; var a:array [1..n] of integer; i,x:integer; begin For i:=1 to n do begin Write('a[',i,']='); readln(a[i]); if a[i]<>0 then inc(x); end; Writeln; Writeln('Массив: '); For i:=1 to n do write(a[i]:3); Writeln; Writeln('Ненулевых элементов - ',x); For i:=1 to n do if a[i]<>0 then writeln('a[',i,']=',a[i]); end.
0 / 0 / 0 Регистрация: 21.05.2014 Сообщений: 12 |
|
1 |
|
Найти количество ненулевых элементов массива05.07.2014, 15:50. Показов 6825. Ответов 5
Написать программу, которая вводит с клавиатуры одномерный массив из 5 целых чисел, после чего выводит количество ненулевых элементов (массивы)
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
05.07.2014, 15:50 |
5 |
Donnerwetter 40 / 40 / 17 Регистрация: 04.02.2014 Сообщений: 144 |
||||
05.07.2014, 16:56 |
2 |
|||
0 |
TyLinka 34 / 34 / 21 Регистрация: 02.02.2012 Сообщений: 181 |
||||
05.07.2014, 17:02 |
3 |
|||
0 |
Kerry_Jr 3105 / 2590 / 1219 Регистрация: 14.05.2014 Сообщений: 7,236 Записей в блоге: 1 |
||||
05.07.2014, 17:03 |
4 |
|||
Donnerwetter, Чуть укорочу ваш код
0 |
40 / 40 / 17 Регистрация: 04.02.2014 Сообщений: 144 |
|
05.07.2014, 17:16 |
5 |
Kerry_Jr, все верно, просто разбросал на два цикла, чтобы человеку был понятен механизм
0 |
sourcerer Модератор 5148 / 2327 / 339 Регистрация: 20.02.2013 Сообщений: 5,720 Записей в блоге: 20 |
||||
06.07.2014, 03:05 |
6 |
|||
Можно не использовать переменную n, хватит и объявленной внутри цикла for переменной i:
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
06.07.2014, 03:05 |
Помогаю со студенческими работами здесь Найти произведение ненулевых элементов и количество нулевых элементов Найти количество ненулевых элементов в заданном файле Дан текстовый файл. В этом файле записана… Найти произведение ненулевых элементов массива и подсчитать число нулевых элементов Найти максимальный элемент из элементов массива, не кратных числу 4, и произведение ненулевых элементов Найти сумму положительных элементов массива и произведение ненулевых элементов, стоящих на нечётных местах Найти произведение ненулевых элементов массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 6 |
- numpy.count_nonzero(a, axis=None, *, keepdims=False)[source]#
-
Counts the number of non-zero values in the array
a
.The word “non-zero” is in reference to the Python 2.x
built-in method__nonzero__()
(renamed__bool__()
in Python 3.x) of Python objects that tests an object’s
“truthfulness”. For example, any number is considered
truthful if it is nonzero, whereas any string is considered
truthful if it is not the empty string. Thus, this function
(recursively) counts how many elements ina
(and in
sub-arrays thereof) have their__nonzero__()
or__bool__()
method evaluated toTrue
.- Parameters:
-
- aarray_like
-
The array for which to count non-zeros.
- axisint or tuple, optional
-
Axis or tuple of axes along which to count non-zeros.
Default is None, meaning that non-zeros will be counted
along a flattened version ofa
.New in version 1.12.0.
- keepdimsbool, optional
-
If this is set to True, the axes that are counted are left
in the result as dimensions with size one. With this option,
the result will broadcast correctly against the input array.New in version 1.19.0.
- Returns:
-
- countint or array of int
-
Number of non-zero values in the array along a given axis.
Otherwise, the total number of non-zero values in the array
is returned.
See also
nonzero
-
Return the coordinates of all the non-zero values.
Examples
>>> np.count_nonzero(np.eye(4)) 4 >>> a = np.array([[0, 1, 7, 0], ... [3, 0, 2, 19]]) >>> np.count_nonzero(a) 5 >>> np.count_nonzero(a, axis=0) array([1, 1, 2, 1]) >>> np.count_nonzero(a, axis=1) array([2, 3]) >>> np.count_nonzero(a, axis=1, keepdims=True) array([[2], [3]])
В этом посте мы рассмотрим, как узнать число элементов в списке Python, удовлетворяющих определенным условиям или критериям.
Если вам просто нужно найти количество конкретных элементов с списке, используйте метод .count()
>>> list_numbers = [1, 2, 2, 5, 5, 7, 4, 2, 1]
>>> print(list_numbers.count(2))
3
Существует несколько способов такого подсчета, и мы изучим каждый из них с помощью примеров. Итак, давайте начнем.
1. Использование цикла for для подсчета в списке Python
В этом фрагменте кода мы используем цикл for для подсчета элементов списка Python, удовлетворяющих условиям или критериям. Мы перебираем каждый элемент списка и проверяем условие, если оно истинно, то мы увеличиваем счетчик на 1. Это простой процесс сопоставления и подсчета для получения интересующего нас количества.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
count = 0
for item in list_numbers:
if item%5 == 0:
count += 1
print("количество элементов списка, удовлетворяющих заданному условию:", count)
количество элементов списка, удовлетворяющих заданному условию: 6
2. Применение len() со списковыми включениями для подсчета в списке Python
В представленном ниже фрагменте кода, мы используем списковые включения (list comprehension), чтобы создать новый список, элементы которого соответствует заданному условию, после чего мы получаем длину собранного списка. Это намного легче понять на примере, поэтому давайте перейдем к нему.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
element_count = len([item for item in list_numbers if item%5 == 0])
print(
"количество элементов списка, удовлетворяющих заданному условию:",
element_count
)
количество элементов списка, удовлетворяющих заданному условию: 6
Подсчет ненулевых элементов
В этом примере мы находим общее количество ненулевых элементов. Чтобы узнать число нулевых членов списка, мы можем просто изменить условие на if item == 0
.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 0, 0, 0]
element_count = len([item for item in list_numbers if item != 0])
print(
"количество элементов списка, удовлетворяющих заданному условию:",
element_count
)
количество элементов списка, удовлетворяющих заданному условию: 7
3. sum() и выражение-генератор для подсчета в списке Python
В этом примере кода мы используем sum()
с генераторным выражением. Каждый элемент списка проходит проверку условием и для тех элементов, которые ему удовлетворяют, возвращается значение True
. Метод sum()
в свою очередь подсчитывает общее число истинных значений.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
count = 0
count = sum(True for i in list_numbers if i % 5 == 0)
print(
"количество элементов списка, удовлетворяющих заданному условию:",
count
)
количество элементов списка, удовлетворяющих заданному условию: 6
4. sum() и map() для подсчета элементов списка Python с условиями или критериями
Функция map(fun, iterable)
принимает два аргумента: итерируемый объект (это может быть строка, кортеж, список или словарь) и функцию, которая применяется к каждому его элементу, — и возвращает map-объект (итератор). Для применения одной функции внутри другой идеально подходит лямбда-функция. Таким образом, map()
примет первый аргумент в виде лямбда-функции.
Здесь sum()
используется с функцией map()
, чтобы получить количество всех элементов списка, которые делятся на 5.
Давайте разберемся на примере, в котором переданная лямбда-функция предназначена для фильтрации членов списка, не кратных 5.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
count = 0
count = sum(map(lambda item: item % 5 == 0, list_numbers))
print(
"количество элементов списка, удовлетворяющих заданному условию:",
count
)
количество элементов списка, удовлетворяющих заданному условию: 6
5. reduce() с лямбда-функцией для подсчета элементов списка Python с условием или критериями
Lambda — это анонимная (без имени) функция, которая может принимать много параметров, но тело функции должно содержать только одно выражение. Лямбда-функции чаще всего применяют для передачи в качестве аргументов в другие функции или для написания более лаконичного кода. В этом примере мы собираемся использовать функции sum()
, map()
и reduce()
для подсчета элементов в списке, которые делятся на 5.
Приведенный ниже код наглядно демонстрирует это.
from functools import reduce
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
result_count = reduce(
lambda count, item: count + (item % 5 == 0),
list_numbers,
0
)
print(
"количество элементов списка, удовлетворяющих заданному условию:",
result_count
)
количество элементов списка, удовлетворяющих заданному условию: 6
Надеюсь, что вы узнали о различных подходах к подсчету элементов в списке Python с помощью условия или критериев для фильтрации данных.
Удачного обучения!