Мне нужно вывести на экран массив и символ, который встречается больше всего в нём.
Мой код:
int main()
{
const int max_elem = 200000;
char *array1 = new char(max_elem);
for (int i = 0; i < max_elem; ++i)
{
array1[i] = rand() % 200;
}
std::cout << "array -" << array1 << '\n';
size_t size = sizeof(array1) / sizeof(array1[0]);
char find = findCharacter(array1, size);
std::cout << "find -" << find << '\n';
return 0;
}
Но не выводится. Что я не так делаю?
findCharacter функция, где я ищу символ. Она правильно работает.
В продемонстрированном куске кода несколько ошибок:
Попытка вывести на экран массив случайных символов как строку до добра не доведёт. Во-первых, могут быть нулевые символы, которые просто приведут к остановке дальнейшего вывода (см. нуль-терминированные строки). Во-вторых, имеются непечатные символы, типа перевода строк, звоночков и т.п. Чтобы все эти проблемы решить, надо выводить в нормальном цикле посимвольно, примерно так же как заполняете, и учитывая значение этих символов. Самый простой способ, выводить символ числом, т.е. привести перед выводом к int.
sizeof(array1) / sizeof(array1[0]); такой подход к определению размера массива актуален только для массивов, размер которых задаётся на этапе компиляции, и уж точно не через new, а вида T arr[N]. К тому же совсем не понятно, зачем пытаться вообще вычислить этот размер, если он задан заранее через переменную max_elem.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей