Краткие теоретические сведения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Краткие теоретические сведения



Работа со строками в языке Си реализована путем использования одномерных мас­сивов типа char, т.е. строка символов – это одномерный массив типа char, заканчиваю­щийся нулевым байтом. Нулевой байт – это байт, каждый бит которого равен нулю, для него определена символьная константа ´\0´ (признак окончания строки или нуль-терминатор). Поэтому, если строка должна состоять из k символов, то в описании массива необходимо указать размер k +1.

Например, описание char a[7], означает, что строка содержит шесть символов, а последний байт отведен под нуль-терминатор.

Строковая константа – это набор символов, заключенных в двойные кавычки, например: “Лабораторная работа по строкам”. В конце строковой константы явно указывать символ ´\0´ не нужно.

При декларировании строки можно инициализировать:

              char S1[10] = ”123456789”, S2[ ] = ”12345”;

в последнем случае размер строки будет установлен по фактическому количеству символов.

Для ввода строки с клавиатуры дисплея используются две стандартные функции, прототипы которых приведены в файле stdio.h.

В функции scanf для ввода значений строковых переменных используется спецификатор %s, ввод производится до первого пробела.

Функция gets обеспечивает ввод строки с пробелами, ввод символов завершается нажатием клавиши Enter.

Обе функции автоматически ставят в конец строки нулевой байт. Так как строка – это массив символов, а ID массива – указатель на его начало в памяти, то символ «&» перед ID строк указывать не надо.

Вывод строк выполняют функции printf или puts. Обе функции выводят символьный массив до первого нулевого байта. Функция puts автоматически переводит курсор после вывода строковой информации в начало новой строки.

Операции над строками как объектами сложного типа, рекомендуется выполнять, используя стандартные функции.

Рассмотрим наиболее часто используемые функции, декларации которых размещены в файле string.h:

strcpy (S1, S2) - копирует содержимое строки S2 в строку S1;

strcat (S1, S2) - присоединяет строку S2 к строке S1 и помещает ее в массив, где находилась строка S1, при этом строка S2 не изменяется; нулевой байт строки S1 заменяется первым символом строки S2;

strcmp (S1, S2) - сравнивает строки S1, S2 и возвращает значение 0, если строки равны, т.е. содержат одно и то же число одинаковых символов; значение <0, если S1<S2; значение >0, если S1>S2;

strlen (S) возвращает длину строки, т.е. количество символов, начиная с первого (S[0]) и до нуль-терминатора, который не учитывается.

Функции преобразования строки S в число (stdlib.h):

- целое: int atoi (S);

- длинное целое: long atol (S);

- действительное: double atof (S);

при ошибке возвращают значение 0.

Функции преобразования числа V в строку S (stdlib.h):

- целое: itoa (int V,char S,int kod);

- длинное целое: ltoa (long V,char S,int kod);

2<=kod<=36, для отрицательных чисел kod=10.

Пример 1: проверить, является ли введенная строка (не более 80 символов) палиндромом (справа налево читается так же, как и слева направо).

#include <stdio.h>

#include <string.h>

#include <conio.h>

void main(void) {

char s[80], *s1;                                      

int i, k;

puts(" Введите исходную строку (не более 80 символов) ");

gets(s);

    k=strlen(s);

    puts(" Результаты работы программы ");

    for (i = 0; i < k; i++)

              *(s1+ i) = s[k-i-1];       // Переворачиваем строку s

s1[k] = ’\0’;                                // Устанавливаем конец строки

printf(“ %s\n”,strcpy(s1,s)? ” YES - Pаlindrom!”: ” NO!”)

}

Пример 2: упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой.

#include<conio.h>

#include<stdio.h>

#include<string.h>

void main(void) {

char s[20][10], r[10];

int i, j, n;

puts(" Введите количество слов ");

scanf(“%d”,&n);

puts(" Вводите слова: ");

for(i=0; i<n; i++) scanf("%s",&s[i]);

for(i=0; i<(n-1); i++)

          for(j=(i+1); j<n;j ++)

                   if(strcmp(s[i],s[j])>0) {

                         strcpy(r,s[i]);

            strcpy(s[i],s[j]);

            strcpy(s[j],r);

}

for(i=0;i<n;i++) printf("\n %s",s[i]);

}

 

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

1. Ввести строку символов, если ее длина четная, удалить 2 первых и 2 последних символа.

2. Ввести строку символов, если ее длина нечетная, удалить символ, стоящий посередине строки.

3. В строке символов заменить каждый второй символ! на $.

4. В строке символов заменить пробелы на символ $.

5. Ввести строку символов, если ее длина >10 - удалить все цифры.

6. Ввести строку символов, если ее длина кратна 3, удалить все цифры, делящиеся на 3.

7. Ввести строку символов, если ее длина кратна 5, посчитать количество скобок всех видов.

8. Ввести строку символов, если ее длина кратна 4, первую часть строки поменять местами со второй.

9. Ввести строку символов, если ее длина равна 10, удалить все буквы - A,... Z.

10. Ввести строку символов, если ее длина >15, удалить все буквы - a…z.

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

12. Ввести строку символов, если ее длина >6, выделить подстроку в { } скобках.

13. Ввести строку из цифр, удалить из нее цифры, кратные 3, и записать их в другую строку.

14. Ввести целое число. Определить, симметрично ли оно, т.е. одинаковы ли цифры слева и справа (12321). Записать 3 последние цифры в одномерный массив.

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

1. Укажите типы массивов, применяемых в языке Си.

2. Формы (способы) работы с элементами массива.

3. Как описываются строки в языке Си?


ЗАДАНИЕ 8. Программирование алгоритмов с использованием структур и файлов

 

Цель работы: изучить особенности работы с составным типом данных – структурой и способы создания и работы с файлами в языке Си.

 



Поделиться:


Последнее изменение этой страницы: 2020-11-28; просмотров: 76; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.225.35.81 (0.008 с.)