Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Теоретические сведения. В языке С нет специального типа данных для строковых переменных




 

В языке С нет специального типа данных для строковых переменных. Для этих целей используются массивы символов (тип char). Следующий пример демонстрирует использование строк в программе:

char str1[100] = {‘П’,’р’,’и’,’в’,’е’,’т’,’\0’}; char str2[100] = “Привет”;

char str3[] = “Привет”; printf(“%s\n%s\n%s\n”,str1,str2,str3);

В приведенном примере показаны три способа инициализации строковых переменных. Первый способ является классическим объявлением массива, второй и третий используются специально для строк. Причем в последнем случае, компилятор сам определяет нужную длину массива для записи строки. Анализируя первый и второй способы инициализации массива символов возникает вопрос: каким образом язык С++ «знает» где заканчивается строка?

Действительно, массив str2 содержит 100 элементов, а массив str3 меньше 100, тем не менее длина строки и в первом и во втором случаях одна и та же. Такой эффект достигается за счет использования специальных управляющих кодов, которые говорят где заканчивается строка или где используется перенос внутри одной строки и т.п. В частности символ ‘\0’ означает в языке С++ конец строки и все символы после него игнорируются как символы строки. Следующий пример показывает особенность использования данного специального символа.

char str1[10] = {‘Л’,’е’,’к’,’ц’,’и’,’я’,’\0’};

char str2[10] = {‘Л’,’е’,’к’,’ц’, ’\0’,’и’,’я’ };

char str3[10] = {‘Л’,’е’, ’\0’,’к’,’ц’,’и’,’я’ };

printf(“%s\n%s\n%s\n”,str1,str2,str3);

Результатом работы данного кода будет вывод следующих трех строк:

Лекция

Лекц

Ле

Из этого примера видно как символ конца строки ‘\0’ влияет на длину строк. Таким образом, чтобы подсчитать длину строки (число символов)

необходимо считать символы до тех пор, пока не встретится символ ‘\0’ или не будет достигнут конец массива. Функция вычисления размера строк уже

реализована в стандартной библиотеке языка С string.h и имеет следующий синтаксис:

 

int strlen(char* str);

 

где char* str – указатель на строку (об указателях речь пойдет ниже).

Следующая программа показывает использование функции strlen().

Листинг 5. Пример использования функции strlen().

#include <stdio.h>

#include <string.h> int main(void)

{

char str[] = “Привет мир!”; int length = strlen(str);

printf(“Длина строки = %d.\n”,length);

return 0;

}

Результатом работы программы будет вывод на экран числа 11. Учитывая, что первый символ имеет нулевой индекс, то можно заметить, что данная функция считает и символ ‘\0’.

Теперь рассмотрим правила присваивания одной строковой переменной другой. Допустим, объявлены две строки

char str1[] = “Это первая строка”; char str2[] = “Это вторая строка”;

и необходимо выполнить оператор присваивания

str1 = str2;

При такой записи оператора присваивания компилятор выдаст сообщение об ошибке. Для того чтобы выполнить копирование необходимо перебирать по порядку элементы одного массива и присваивать их другому массиву. Данная функция реализована в библиотеке языка С string.h и имеет следующее определение:

char* strcpy(char* dest, char* src);

Она выполняет копирование строки src в строку dest и возвращает строку

dest. В листинге 6 показано использование функции strcpy().

Листинг 6. Пример использования функции strcpy().

#include <stdio.h>

#include <strin g.h> int main(void)

{

char src[] = “Привет мир!”; char dest[100]; strcpy(dest,src); printf(“%s\n”,dest);

return 0;

}

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

int strcmp(char* str1, char* str2);

и реализована в библиотеке string.h. Данная функция возвращает нуль, если строки str1 и str2 равны и не нуль в противном случае. Приведем пример использования данной функции.

char str1[] = “Это первая строка”;

char str2[] = “Это вторая строка”;

if(strcmp(str1,str2)== 0)

printf(“Строка %s равна строке %s\n”,str1,str2);

else printf(“Срока %s не равна строке %s\n”,str1,str2);

В языке С имеется несколько функций, позволяющих вводить строки с клавиатуры. Самой распространенной из них является ранее рассмотренная функция scanf(), которой в качестве параметра передается ссылка на массив символов:

char str[100]; scanf(“%s”,str);

В результате выполнения этого кода, переменная str будет содержать введенную пользователем последовательность символов. Кроме функции scanf() также часто используют функцию gets() библиотеки stdio.h, которая в качестве аргумента принимает ссылку на массив символов:

gest(str);

Данная функция считывает символы до тех пор, пока пользователь не нажмет клавишу Enter, т.е. введет символ перевода строки ‘\n’. Затем она записывает вместо символа ‘\n’ символ ‘\0’ и передает строку вызывающей программе.

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

#define DEF “Заданная строка”

char str[] = “Это первая строка”; puts(str);

puts(DEF); puts(&str[4]);

Результат работы следующий:

Это первая строка Заданная строка первая строка

Еще одной удобной функцией работы со строками является функция sprintf() библиотеки stdio.h. Ее действие аналогично рассмотренной ранее функции printf() с той лишь разницей, что результат вывода заносится в строковую переменную, а не на экран:

int age;

char name[100], str[100];

printf(“Введите Ваше имя: ”); scanf(“%s”,name);

printf(“Введите Ваш возраст: ”);

scanf(“%d”,&age);

sprintf(str,”Здраствуйте %s. Ваш возраст %d лет”,name,age);

puts(str);

В результате массив str будет содержать строку «Здраствуйте …

Ваш возраст…». Анализ последнего примера показывает, что с помощью функции sprintf() можно преобразовывать числовые переменные в

строковые, объединять несколько строк в одну и т.п.

Варианты заданий

 

Вариант 1-е задание 2-е задание
  Написать программу поэлементного копирования строки «Hello World» в другой символьный массив Написать программу объединения трех строк “The laboratory”, “work” и “№6” в четвертую строку с текстом: «The laboratory work №6» без использования функции sprintf()
  Написать программу замены во веденной строке малых букв а на заглавные Написать программу удаления букв р из введенной строки
  Написать программу подсчета букв е во введенной строке Написать программу добавления слова «hello» после первого слова введенной строки *)
  Написать программу удаления букв о из введенного слова Написать программу сравнения двух строк с помощью функции strcmp()
  Написать программу добавления пробела после каждой буквы а введенной строки Написать программу замены во веденной строке заглавных букв О на малые
  Написать программу подсчета числа слов в строке *) Написать программу подсчета букв ‘и’ во введенной строке
  Написать программу выделения первого слова из введенной строки *) и отображение его на экране Написать программу удаления всех пробелов из введенной строки
  Написать программу выделения последнего слова из введенной строки *) и отображение его на экране Написать программу копирования первой половины введенной строки в другую строку
  Написать программу вывода введенного слова задом на перед. Написать программу сравнения первых половин двух введенных строк
  Написать программу удаления последнего слова из строки *) Написать программу замещения первой половины строки второй, а второй – первой

 

* считается, что слова разделяются пробелом

 

Контрольные вопросы

 

1. Как задаются строки в программе на языке С?

2. Для чего предназначена функция strcpy() и в какой библиотеке она определена?

3. Запишите возможные способы начальной инициализации строки.

4. Какой управляющий символ соответствует концу строки?

5. Что выполняет функция strcmp()?

6. Какую роль играют структуры в программировании?

7. Что возвращает функция strlen()?

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных