Неправильное преобразование типа void to char - C (СИ)
Формулировка задачи:
Стоит задача... написать прогу , которая считает количество введенных символов и выводит вероятность нахождения каждого символа в строке.
Для начала я хочу узнать количество символов, которое я помещаю в переменную t. Потом хочу динамически выделить память для массива размером t элементов, но на этом этапе у меня выходит ошибка. Только начинаю дружить с си и адресной арифметикой не ругайте строго) в чем проблема не знаю...
18 28 D:\programing\test\main.cpp [Error] invalid conversion from 'void*' to 'char*' [-fpermissive]
#include <stdio.h> #include <ctype.h> #include <stdlib.h> int main(void) { char *p; char ch; int t=0; printf("input some text\nfor exit input . \n"); do { ch = getchar(); t++; } while (ch != '.'); printf("%d",t); p = malloc(t*sizeof(char)); return 0; }
Решение задачи: «Неправильное преобразование типа void to char»
textual
Листинг программы
#include "string.h" // strcspn #include "stdio.h" // fgets double* char_freq(const char* str) { static double freq[256]; int i; for( i = 0; i < 256; ++i ) { freq[i] = 0.0; } double sum = 0.0; while( i = (unsigned char) *str++ ) { freq[i] += 1.0; sum += 1.0; } if( sum != 0.0 ) { for( i = 0; i < 256; ++i ) { freq[i] /= sum; } } return freq; } void chomp(char* str) { str += strcspn(str, ".\n"); *str = '\0'; } int main(void) { char buf[100]; while( fgets(buf, sizeof(buf), stdin) ) { chomp(buf); double* freq = char_freq(buf); int i; for( i = 0; i < 256; ++i ) { if( freq[i] != 0.0 ) { printf("Frequency of %c = %f\n", (char) i, freq[i]); } } } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы: string.h (для функции strcspn) и stdio.h (для функции fgets).
- Определяем функцию char_freq, которая принимает на вход указатель на строку (const char str) и возвращает массив частот (double) для каждого символа в строке.
- Создаем статический массив double freq[256] для хранения частот каждого символа.
- В функции main создаем буфер (buf) для чтения строк из стандартного ввода.
- В цикле while считываем строки с помощью функции fgets и вызываем функцию chomp для удаления символов новой строки и точки.
- Вызываем функцию char_freq для вычисления частоты каждого символа в строке.
- В цикле for выводим каждую частоту, которая не равна нулю, с помощью функции printf.
- Возвращаем 0 в конце функции main, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д