|
Хотя языки С и C++ поддерживают тип данных char, в переменных этого типа могут храниться только одиночные символы, но не строки текста. Если в программе необходимо работать со строками, их можно создавать как массивы символов.
В таком массиве для каждого символа строки отводится своя ячейка, а последний элемент содержит символ конца строки — \0. В следующем примере создаются три символьных массива. Массив szvehicle1 заполняется символ за символом с помощью оператора присваивания. Данные в массив szvehicle2 заносятся с помощью функции scanf(), а массив szvehicle3 инициализируется константной строкой.
/*
* string.с
* Эта программа на языке С демонстрирует работу с массивами символов.
*/
#include ‹stdio.h›
main() { char szvehiclel[7], /* машина
*/ szvehicle2[8];
/* самолет */ static char szvehicleS[8] = "корабль";
/* корабль */ szvehiclel[0] = 'м' szvehiclel[1] = 'a' szvehiclel [2] = 'ш' szvehiclel[3] = 'и' szvehiclel[4] = 'н' szvehiclel[5] = 'a' szvehiclel[6] = '\0';
printf ("\n\n\tВведите слово -—> самолет ") ;
scanf("%s",szvehicle2);
printf("%s\n",szvehiclel);
printf("%s\n",szvehicle2);
printf("%s\n",szvehicle3);
return(0); }
Хотя слово "машина", сохраненное в массиве szvehiclel, состоит из шести букв, массив содержит семь элементов: по одному для каждой буквы плюс еще один для символа конца строки.
То же самое справедливо и для других двух массивов. Вспомните также, что массив szvehicle3 можно задать путем указания последовательности символов в фигурных скобках:
static char szvehicleS[8]= {'к','о','р','а','б','л','ь','\0'};
Разница заключается в том, что здесь необходимо явно указывать символ конца строки, тогда как в применяемом в программе способе добавление данного символа происходит автоматически. Объявление массива можно записать также следующим образом:
static char szvehicleS[] = "корабль";
При этом размер массива определяется компилятором автоматически. Часто содержимое массива запрашивается у пользователя с помощью функции scanf( ) , как в случае с массивом szvehicle2.
В нашем примере в функции scanf( ) применяется спецификация %s,означающая ввод строки. В результате функция пропустит ведущие пробельные литеры (символы пробела, табуляции и конца абзаца), после чего; запишет в массив последовательность символов вплоть до следующей пробельной литеры. В завершение к набору символов будет автоматически добавлен символ конца строки. Помните, что при объявлении массива следует указать такой размер, чтобы в массиве поместился весь вводимый текст вместе с символом \0.
Рассмотрим еще раз строку программы, в которой в массив szvehicle2 записывается информация:
scanf ("%s",szvehicle2);
Не удивил ли вас тот факт, что имени szvehicle2 не предшествует оператор взятия адреса &? Это объясняется тем, что имя массива, в отличие от имен других переменных, уже является адресом первого его элемента. Когда в функции printf ( ) задана спецификация %s, то предполагается наличие аргумента также в виде адреса строки. Строка текста будет выведена на экран полностью, за исключением завершающего нулевого символа.
Ниже показана программа на языке C++, аналогичная рассмотренной выше:
//
// string. срр
// Это версия предыдущей программы на языке C++.
//
#include ‹iostream.h›
main () { char szvehiclel [7],
// машина szvehicle2 [8];
// самолет static char szvehicleS[8] = "корабль";
// корабль szvehiclel[0] = 'м'
szvehiclel[1] = 'a'
szvehiclel[2] = 'ш'
szvehiclel[3] = 'и'
szvehiclel[4] = 'н'
szvehiclel[5] = 'a'
szvehiclel[6] = '\0';
cout<< "\n\n\tВведите слово --> самолет ";
cin >> szvehicle2;
cout << szvehiclel << "\n";
cout << szvehicleS << "\n";
return(0);
}
При выполнении любой из приведенных программ на экран будет выведено следующее:
машина
самолет
корабль
cout << szvehicle2 << "\n";
|
|