Как посчитать количество символов в массиве c
Перейти к содержимому

Как посчитать количество символов в массиве c

  • автор:

Подсчет символов, строк и слов

Программа считает количество введенных пользователем символов, строк и слов. Чтобы программа корректно закончила работу и правильно посчитала, после набора строк надо перейти на новую строку, после чего нажать Ctrl + D (по крайней мере в терминале Linux).

#include int main() < char ch, flag=-1; unsigned c=0; // символы unsigned w=0; // слова unsigned n=0; // строки while ((ch = getchar()) != EOF) < if (ch == '\n') n++; else c++; if (ch == ' ' || ch == '\n') flag = -1; else if (flag == -1) < flag = 1; w++; >> printf("Символы: %u\n", c); printf(" Слова: %u\n", w); printf(" Строки: %u\n", n); >
one two three four Символы: 16 Слова: 4 Строки: 3

X Скрыть Наверх

Решение задач на языке C

Найти количество символов в слове

Есть массив на 80. В каждом элементе массива находится слово. Нужно подсчитать количество символов элементе массива.

Отслеживать

задан 25 дек 2019 в 18:07

85 5 5 бронзовых знаков

Нужно просто найти длину слова, или количество каких-то определенных символов? И массив на 80 чего?

– user361068

25 дек 2019 в 18:25

Мне просто нужно подсчитать количество символов с строке которая хранится в одном из элементов массива. Например: «hello» — 5 символов

25 дек 2019 в 18:30

strlen возвращает длину строки

число элементов массива (C)

будет работать? а то у меня что-то не особо работает=([/QUOTE]Не будет работать, так как в функции уже идет речь не о массиве, а об указателя на массив. А длина указателя равна 4 байта.

21 сентября 2006 года
5.6K / / 13.08.2003

int сhsize(int a[], int n) if (n> sizeof(a)/sizeof(int) )
return 1;
>

будет работать? а то у меня что-то не особо работает=([/quote]
эээ. а как она должна работать? на i386 архитектуре, при n>1 она будет возвращать 0.

21 сентября 2006 года
5.6K / / 13.08.2003
добавтье в функцию параметр — размер передаваемого массива
21 сентября 2006 года
2.2K / / 04.02.2006

учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:

int сhsize(int sizeA, int n) <
if (n > sizeA/sizeof(int) ) return 0;
return 1;
> int сhsize(int n1, int n2) <
if (n2 > n1 ) return 0;
return 1;
> 21 сентября 2006 года
267 / / 25.07.2006

[QUOTE=OlgaKr]учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:

int сhsize(int sizeA, int n) <
if (n > sizeA/sizeof(int) ) return 0;
return 1;
> int сhsize(int n1, int n2) <
if (n2 > n1 ) return 0;
return 1;
> [/QUOTE]Это уже решение. Только Знак больше нужно заменить на больше равно.
22 сентября 2006 года
2.2K / / 04.02.2006
Только Знак больше нужно заменить на больше равно.

а это уже не ко мне, я мысли читать не умею.
у fly_girl написано больше (copy/paste), ей видней что она хочет.
з.ы. для меня вообще ситуация немного странная, когда неизвестен размер стати-го массива.

22 сентября 2006 года
4.8K / / 20.01.2000

int сhsize(int a[], int n) if (n> sizeof(a)/sizeof(int) )
return 1;
>

будет работать? а то у меня что-то не особо работает=([/QUOTE]

В C++ будет работать так:

template
int сhsize( int (&a)[N], int n )
return (n > N) ? 0 : 1;
>

22 сентября 2006 года
2.2K / / 04.02.2006
[quote=Green]В C++ будет работать так: . [/quote]
у нее задача по С
22 сентября 2006 года
1.1K / / 19.09.2006

При помощи sizeof можно определить только размер массива в стеке текущей функции, что зачастую бессмысленно, ибо этот размер задаёт сам программист константой

const int cArSize = 100;
char str [cArSize];

А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) — точное название функции не помню, хелпа под рукой сейчас нет 🙁

Function (TRecord *pRecArray)
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
>

22 сентября 2006 года
267 / / 25.07.2006

[QUOTE=el scorpio]А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) — точное название функции не помню, хелпа под рукой сейчас нет 🙁

Function (TRecord *pRecArray)
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
>

[/QUOTE]Согласно help _msize.
#include
#include
#include

int сhsize(int *a, int n)
if(n>=_nsize(a)/sizeof(int) )
return 0;
return 1;
>

void main()
int *a = (int *)malloc(100*sizeof(int));
int t = chsize(a, 80);
.
.

22 сентября 2006 года
221 / / 11.09.2006
Да никак нельзя узнать размер массива. Для чего придумали строки заканчивающиеся нулем?
22 сентября 2006 года
13 / / 24.04.2006

я попробую _nsize.
дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.

22 сентября 2006 года
1.1K / / 19.09.2006

[QUOTE=fly_girl]дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.[/QUOTE]
Хорошая функция 🙂
Вот только ситуацию такую проще не создавать, чем решать:D
А вообще, в подобных ситуациях лучше использовать стандартный Builder’овский шаблон DynamicArray. Этот объект-контейнер изображает массив и сам следит за выделением/освобождением памяти, а также корректностью индексации.

22 сентября 2006 года
13 / / 24.04.2006
просто задание с обычными массивамии
и просили эту ситуацию учесть..
22 сентября 2006 года
221 / / 11.09.2006

[QUOTE=fly_girl]просто задание с обычными массивамии
и просили эту ситуацию учесть..[/QUOTE]
Мое мнение: либо это задача на смекалку, либо твой учитель курит грибы. Но в обоих случаях переданный функции указатель — это всего лишь число соответствующее адресу в памяти.

Как посчитать количество элементов в массиве?

BacCM

Но лучше std::array использовать вообще. У него есть метод size.

Ответ написан более трёх лет назад
Нравится 2 3 комментария

BacCM

Правда так же требуется вся информация о типе массива, но в отличии от моего варианта, не скомпилируется при отсутствии этой информации. Что большой плюс.
Правда промышленная разработка на C++17 это пока только мечты. Мне бы мои легаси проекты заволочь хотя бы на 11

Vitaly @vt4a2h Куратор тега C++

Василий Мельников, ну второй вариант требует только 11го стандарта, насколько мне известно. std::array (который я и рекомендую использовать в данном случае) тоже только 11го стандарта требует.

Касательно C++17, многие компании, в том числе и наша, его уже давно используют. Два года прошло с утверждения как никак. Да и все популярные компиляторы его поддерживают.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *