Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Передача строк в качестве аргументов функций




Строки – это массивы символов, поэтому они передаются в функции так же, как и массивы. Отличие заключается в том, что передавать длину строки не нужно, так как строки заканчиваются нуль-символом, благодаря которому конец строки или ее длину можно определить.

Рассмотрим этот механизм на примере. Напишем функцию, которая принимает в качестве аргумента строку и возвращает количество цифр в этой строке. Под цифрой будем понимать один из символов от ‘0’ до ‘9’. Алгоритм этой функции достаточно прост: нужно объявить переменную, которую инициализировать нулем, и пробежаться по всей строке, символ за символом, инкрементируя эту переменную, если символ является цифрой. Как определить, является ли символ цифрой? Перед ответом на этот вопрос заметим, что данную проверку будет разумно вынести в отдельную функцию, назовем ее isDigit(), которая принимает строку и возвращает true или false в зависимости от результата проверки. Согласно кодировке символы, отвечающие за цифры, идут один за другим. Проверьте это, выведя значения этих символов с помощью спецификатора целого числа:

const char digits[] = "0123456789";

printf("-----------------------\n");

printf("|%6s %3s|", "Символ", "Код");

printf("%6s %3s|\n", "Символ", "Код");

printf("-----------------------\n");

for (int i=0; i<strlen(digits); i+=2) {

char dgt = digits[i];

printf("| \'%c\' %-3d|", dgt, dgt);

dgt = digits[i+1];

printf(" \'%c\' %-3d|\n", dgt, dgt);

 

}

printf("-----------------------\n");

 

 

Используя это наблюдение, функцию isDigit() можно реализовать следующим образом:

 

bool isDigit(char symbol) {

return '0'<=symbol && symbol<='9';

}

 

Записи '0'<=symbol и symbol<='9' подразумевают, что символы заменяются на их числовые значения согласно установленной кодировке, а затем производится сравнение.

Желающие действовать «в лоб» могут довольствоваться другой реализацией:

 

bool isDigitV2(char symbol) {

const char digits[] = "0123456789";

for (int i=0; i<strlen(digits); i++) {

if (symbol==digits[i]) {

return true;

}

}

return false;

}

 

Используя реализованную функцию проверки, является ли символ цифрой, функция подсчета количества цифр в строке принимает лаконичный и понятный вид:

 

int getNumberOfDigits(char symbols[]) {

int n_digits=0;

for (int i=0; i<strlen(symbols); i++) {

if (isDigit(symbols[i])) {

n_digits++;

}

}

return n_digits;

}

 

Обратите внимание на то, что поскольку функция isDigit() возвращает значение логического типа, то в условии сравнений уже не нужно. Вызвать написанную функцию можно так:

 

char str[50];

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

gets(str);

printf("Количество цифр равно %d\n",

getNumberOfDigits(str));


Поделиться:

Дата добавления: 2015-08-05; просмотров: 475; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты