Передача указателей в функцию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа находит наибольшее число одинаковых рядом идущих символов, и выводит на экран это число и символ, который был повторен. Например На входе массив: {aaabbbbbccaaa} Результат: 5b (То есть связка из b наиболее длинна и протягивается в количестве 5 одинаковых символов) Реализовать нужно, при помощи указателей. Без указателей, если решение в main, все работает, но вот когда попытался прикрутить указатели в функцию dec- запутался... Подскажите что не так? Где моя ошибка?
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 1024

void input(char *arr){
 
gets_s(arr, SIZE);

}
 
void dec(char **arr, char *r, int *max, int *count){
 
for (int i = 0; i < *arr[i] != '\0'; i++)
{
if (*arr[i] == *arr[i + 1]){
 
*max++;
 
if (*max > *count){
*count = *max;
*r = *arr[i];
 
}
}
else *max = 1;
 
}
 
}
 
void output(char r, int count){
 
printf("%d\n", count);
printf("%c\n", r);
 
}
 
void main(){
 
char arr[SIZE];
char r=0;
int count = 0;
int max = 1;
 
input(arr);

dec(&arr, &r, &max, &count);
 
//for (int i = 0; i < arr[i] != '\0'; i++)
//{
// if (arr[i] == arr[i + 1]){
 
// max++;
 
// if (max > count){
// count = max;
// r = arr[i];
 
// }
// }
// else max = 1;
 
//}
 
output(r,count);
 
system("pause");
}

Решение задачи: «Передача указателей в функцию»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 1024
 
 
void input(char *arr)
{
 
    gets(arr);
 
}
 
void dec(char *arr, char *r, int *max, int *count)
{
 
    for (; *arr != '\0'; arr++)
    {
        if (*arr == *(arr+1))
        {
 
            (*max)++;
 
            if (*max > *count)
            {
                *count = *max;
                *r = *arr;
 
            }
        }
        else *max = 1;
 
    }
 
}
 
void output(char r, int count)
{
 
    printf("%d\n", count);
    printf("%c\n", r);
 
}
 
int main()
{
 
    char arr[SIZE];
    char r=0;
    int count = 0;
    int max = 1;
 
    input(arr);
 
 
    dec(arr, &r, &max, &count);
 
    output(r,count);
 
    system("pause");
}

Объяснение кода листинга программы

  1. Объединение двух строк с помощью оператора +
  2. Присваивание значения переменной max значению переменной count
  3. Присваивание переменной r значение символа из массива arr
  4. Увеличение значения переменной max на единицу
  5. Сравнение значений переменных max и count
  6. Увеличение значения переменной count на единицу
  7. Установка значения переменной max равным единице
  8. Установка значения переменной count равным единице
  9. Установка значения переменной r равным нулю
  10. Ввод значения массива arr с помощью функции gets
  11. Вывод значения переменной count на экран
  12. Вывод значения переменной r на экран
  13. Объявление функции input
  14. Объявление функции dec
  15. Объявление функции output
  16. Объявление функции main
  17. Создание массива arr типа char с размером 1024
  18. Создание переменной r типа char со значением 0
  19. Создание переменной count типа int со значением 0
  20. Создание переменной max типа int со значением 1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы