Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лб инф передел / C++ / Алиса / Информатика / ПерваяПрограммаС.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
3.17 Mб
Скачать

Присваивание строк

Язык Си не позволяет непосредственно присваивать символы строке, используя инструкции вроде

name = "Сэм";

Для этой цели можно вызвать функцию strcpy(), с которой позволяют работать большинство компиляторов. Синтаксис функции следующий:

strcpy(name, "Сэм");

strcpy(name, name1);

В первом примере символы "Сэм" присваиваются строковой переменной с именем name. Во втором примере символы, которые уже были присвоены переменной name1, копируются в переменную name.

Для того чтобы выполнить эти же действия с помощью собственных инструкций, вам придется последовательно присваивать символьные значения каждому элементу массива:

char name[] = "Алан";

main()

{

char person[10];

int count, index;

count = strlen(name);

for (index = 0; index <= count; index++)

person[index] = name[index];

puts(person);

}

В этой программе происходит присваивание символьных значений одного массива соответствующим элементам другого массива.

Рис. 10.9. Синтаксис функции strcat()

Замечания по Си++

Благодаря перегрузке язык Си++ допускает использование оператора + для сложения двух строк с помощью инструкции:

new_string = string1 + string2;

Слияние строк

Процедура слияния двух строк состоит в том, что символы, содержащиеся в одной строке, добавляются в конец другой, сдвигая нулевой символ. Этот процесс называется конкатенацией (concatenation). В стандарте языка Си K&R определена функция strcat(), работа которой продемонстрирована на рис.10.9. Символы из строки, которая передается функции в качестве второго параметра, добавляются в конец строки, передаваемой в качестве первого параметра.

Массивы строк

Можно организовать массив строк точно так же, как массив данных любого другого типа. Но массив строк, по сути, будет являться уже массивом массивов символов. Массив, элементы которого сами являются массивами, называется двухмерным массивом.

Двухмерный массив можно представить себе как таблицу, имеющую ряды и колонки. Такой массив следует определять с двумя индексами, один из которых определяет количество рядов таблицы, а второй устанавливает количество колонок. Ниже приведены инструкции, определяющие массив, имеющий 10 рядов и 20 колонок, то есть содержащий 200 целочисленных переменных:

int table[10][20];

Представим себе каждый элемент как целое число, занимающее собственную

Рис. 10.10. Определение массива строк

клеточку в таблице 10Ф20. Элемент table[0][0] находится в левом верхнем углу таблицы, а элемент table[0][1] занимает соседнюю клетку справа в том же ряду.

Определяя массив строк, также необходимо использовать два индекса. Первый определяет максимальное количество строк в массиве, а второй указывает максимальную длину каждой строки. Таким образом, определение

char names[10][20];

задает десять строковых переменных names длиной не больше 19 символов в каждой (рис.10.10).

Если вы хотите задавать строки путем ввода значений отдельных символов, следует использовать вложенные циклы. Внешний цикл будет повторяться 10 раз, по одному на каждую строку, а внутренний должен иметь 19 повторов для ввода значений одной строки. На рис.10.11 приведена программа, в которой вводятся значения 10 имен (строковых переменных) в массив, а затем все эти 10 строк с помощью цикла for последовательно выводятся на экран.

Для того чтобы ввести символ в строку, необходимо использовать оба индекса:

name[index][index2] = letter;

Первый индекс указывает номер нужной строки внутри массива, а второй определяет позицию символа внутри строки. Например, на рис.10.12 элемент name[0][3] является четвертым символом (буква м) первой строки ("Адам") в

Рис. 10.11. Программирование массива строк

Рис. 10.12. Строки и элементы массива строк

массиве имен. Чтобы вывести на экран строку целиком, нужен только один индекс, указывающий номер строки:

puts(name[index]);

К счастью, Си и Си++ позволяют ввести всю строку как единое целое, используя только один цикл, повторяющийся по одному разу на каждую строку массива:

main()

{

char name[10][20];

int index;

for (index = 0; index < 10; index++)

gets(name[index]);

for (index = 0; index < 10; index++)

puts(name[index]);

}

Соседние файлы в папке Информатика