Return 1; // выход по ошибке, код ошибки 1

}

printf ("Введитестроку");

gets(s);

i = 0;

while (s[i]!= '\0') {

if (s[i] >= '0' && s[i] <= '9')

count ++;

}

printf("\nНашли %d цифр", count);

}

В этой программе использован тот факт, что коды цифр расположены в таблице символов последовательно от '0' до '9'. Поэтому можно использовать двойное неравенство, а не сравнивать текущий символ s[i] с каждой из цифр. Обратите внимание на разницу между символами

'\0' (символ с кодом 0, признак конца строки) и '0' (символ с кодом 48, цифра 0). Переменная

count работает как счетчик.

Копирование строк

Часто надо записать новое значение в строку или скопировать информацию из одной

строки в другую. Функции копирования принадлежат к числу «опасных» – они могут вызвать серьезную ошибку, если произойдет выход за границы массива. Это бывает в том случае, если строка, в которую копируется информация, имеет недостаточный размер (под нее выделено мало место в памяти).

В копировании участвуют две строки, они называются «источник» (строка, откуда копируется информация) и «приемник» (куда она записывается или добавляется).

При копировании строк надо проверить, чтобы для строки-приемника было выделено достаточно места в памяти

Простое копирование выполняет функция strcpy. Она принимает два аргумента: сначала

строка-приемник, потом – источник (порядок важен!).

char s1[50], s2[10];

gets(s1);

strcpy (s2, s1); // s2 (приемник) <- s1 (источник)

puts (s2);

Этот фрагмент программы является «опасным» с точки зрения выхода за границы строки. В строку s1 можно безопасно записать не более 49 символов (плюс завершающий ноль). Поэтому если с клавиатуры будет введена строка длиннее 49 символов, при записи ее в память произой-

дет выход за границы строки s1. Строка s2 может принять не более 9 символов, поэтому при

большем размере s1 произойдет выход за границы строки s2 .

Поскольку реально функции передается адрес начала строки, можно заставить функцию

начать работу любого символа, а не только с начала строки. Например, следующая строка ско-

пирует строку s2 в область памяти строки s1,которая начинается с ее 6-ого символа, оставив

без изменения первые пять:

strcpy (s1+5, s2);

При этом надо следить, чтобы не выйти за границу массива. Кроме того, если до выполнения

этой операции в строке s1 меньше 5 символов, фокус не удастся.

Еще одна функция позволяет скопировать только заданное количество символов, она на-

зывается strncpy и принимает в третьем параметре количество символов, которые надо ско-

пировать. Важно помнить, что эта функция НЕ записывает завершающий нуль, а только ко-

пирует символы (в отличие от нее strcpy всегда копирует завершающий нуль). Функция

strncpy особенно полезна тогда, когда надо по частям собрать строку из кусочков.

#include <stdio.h>

#include <string.h>

Main()

{

char s1[] = "Ку-ку", s2[10];


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: