Как заполнить массив символов (char)через цикл?
У меня есть массив char на 10 элементов. Как реализовать через цикл его заполнения?
Пример:
char one[14];
for(int i=0;i<14;i++){
cin>>one[i];
}
one[14]//Oleg
//Вывод например имени который записался в этот масив
Ответы (1 шт):
Сначала немного теории. В C++ тип char - это массив из кодом ASCII (насчет кодировки могу ошибиться) символов. Допустим мы объявили и инициализировали массив char с 6 символами:
char my_string[6] = "Hello";
"Под капотом" массив выглядит примерно так:
{72, 101, 108, 108, 111, 0}
В этом легко можно убедиться:
for (unsigned i = 0; i < 5; i++) {
std::cout << static_cast<int> (my_string[i]) << "\n";
} // выведет числа выше, кроме 0
Насчет 0 стоит сделать ремарку - это символ окончания строки и при вводе/инициализации он неявно добавляется в конец массива.
Если вы хотите заполнить массив символами из консоли не посимвольно, а сразу строкой, то самый простой способ - это объявить массив типа char и заполнить его через std::cin :
char my_string[6]; // объявлияем массив char из 5 элементов (шестой - символ окончания строки)
std::cin >> my_string; // заполняем массив из консоли
for (unsigned i = 0; i < 5; i++) { // При вводе "Hello" выведет Hello
std::cout << my_string[i] << "\n"; // А введенное слово посимвольно
} // запишется в массив my_string
Однако здесь кроется опасность. Поскольку в C++ длина данных массивов должна быть задана константной переменной во время компиляции (обычно это литерал), то вы не можете заранее предугадать длину введенного пользователем сообщения. А если сообщение будет больше, чем массив char, то сообщение обрежется, а в конце выполнения программы выдаст ошибку о повреждении стека памяти.
Простой и неэффективный способ избежать этого - объявить массив больше потенциального сообщения пользователя:
char my_string[255];
А вообще лучше использовать std::string для подобных целей:
std::string my_string; // объявление
std::cin >> my_string; // ввод
std::cout << my_string; // Вывод