Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
17.04.2015
Размер:
53.1 Кб
Скачать

Void copy1 ( char s1[],

char s2[] )

{

int i = 0;

while ( s2[i] ) {

s1[i] = s2[i];

i ++;

}

s1[i] = '\0';

}

Void copy2 ( char *s1, char *s2 )

{

while ( *s1++ = *s2++ );

}

Как видите, вторая функция получилась более компактной. Применение указателей позволило не вводить дополнительную переменную, хотя и сделала программу менее ясной. Итак, в условии цикла while стоит оператор присваивания. Если не обращать внимания на плюсы, он оз-

начает «взять символ по адресу s2 и записать его по адресу s1». Двойные плюсы ПОСЛЕ s1 и s2 означают, что ПОСЛЕ выполнения присваивания оба указателя надо увеличить на единицу,то есть перейти к следующему символу.

Что же является условием цикла? Оказывается условие – это величина *s1, то есть код символа по адресу s1. Когда же происходит проверка? Это зависит от расположения знаков ++.

В данном случае они стоят ПОСЛЕ имен переменных, поэтому операция инкремента выполняется ПОСЛЕ проверки условия. Проверка выполняе-тся так: скопировали очередной символ, посмотрели на него, и если он – ноль (признак конца строки), то вышли из цикла. После этого увеличили указатели s1 и s2. Обратите внимание, что после выхода из цикла увеличение указателей также происходит, и они будут указывать не на нули, завершающие строки, а на следующие байты в памяти.

Программа преобразования строк в цифры.

#include

#include

int main()

{

char str_i[] = “120”;

char str_l[] = “120000”;

char str_f[] = “120.50”;

int var_i = atoi(str_i);

long var_l = atol(str_l);

float var_f = atof(str_f);

return 0;

}

В результате выполнение данной программы, переменные var_i, var_l и var_f будут содержать значения 120, 120000 и 120.50 соответственно.

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

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

char имя[количество][длина];

Первым размером матрицы указывается количество строк в массиве, а вторым – максимальная (с учетом завершающего нуля) длина каждой строки. Например, объявление массива из пяти строк максимальной длиной 30 значащих символов будет иметь вид:

char strs[5][31];

При объявлении массивов строк можно производить инициализацию:

char имя[количество][длина] =

{строковый литерал №1, ... строковый литерал №N};

Число строковых литералов должно быть меньше или равно количеству строк в массиве. Если число строковых литералов меньше размера массива, то все остальные элементы инициализируются пустыми строками. Длина каждого строкового литерала должна быть строго меньше значения длины строки (для записи завершающего нуля).

Например:

char days[12][10] = {

”Январь”, ”Февраль”, ”Март”, ”Апрель”, ”Май”,

”Июнь”, ”Июль”, ”Август”, ”Сентябрь”,”Октябрь”,

”Ноябрь”, ”Декабрь”

};

При объявлении массивов строк с инициализацией допускается не указывать количество строк в квадратных скобках. В таком случае, количество строк в массиве будет определено автоматически по числу инициализирующих строковых литералов.

Например, массив из семи строк:

char days[][12] = {

”Понедельник”, ”Вторник”, ”Среда”, ”Четверг”,

”Пятница”, ”Суббота”, ”Воскресенье”

};