Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачник_Главы 5-6.doc
Скачиваний:
2
Добавлен:
15.08.2019
Размер:
665.09 Кб
Скачать

Глава 5. Строки

Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ - это символ с кодом, равным 0, что записывается в виде управляющей последовательности '\0'. По положению нуль-символа определяется фактическая длина строки.

В разных языках программирования предоставляются разные функции для работы со строками: копирования, сравнения, объединения строк, поиска подстроки, определения длины строки и т.д.

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

Слова в тексте разделены одним из следующих символов: пробел, точка, запятая. Определить длину строки и количество слов. Проверить, находится ли подслово "привет" в строке и подсчитать сколько раз.

Для ввода и вывода строки, определения длины строки и поиска подстроки воспользуемся стандартными функциями библиотеки языка С. Подключение функций для работы со строками осуществляется с помощью директивы #include <string.h>

/***************************************************/

/* Строки */

/* Слова в тексте разделены одним из */

/* следующих символов: пробел, точка, запятая. */

/* Определить длину строки и количество слов. */

/* Проверить, находится ли слово "привет" */

/* в строке и подсчитать сколько раз. */

/***************************************************/

#include <stdio.h>

#include <string.h>

#include <conio.h>

#define size 80

void main()

{

clrscr();

char s[size]; // строка символов

char *t[size]; // массив слов

char razd[ ]=" .,"; // массив разделителей слов

int i,l,k=0;

// Ввод строки

fflush(stdin); //очистка буфера клавиатуры

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

gets(s); // ввод строки

printf("\n Исходная строка:\n \t");

puts(s); // вывод строки

printf("\n \t Длина строки =%d",strlen(s));

// Выделяем первое слово и заносим в массив

t[l=0]=strtok(s,razd);

// Выделяем остальные слова и заносим в массив

while( (t[++l]=strtok(NULL,razd)) !=0);

printf("\n \t Всего слов в тексте %d",l);

// Печать слов и их длин

printf("\n\n \t Вывод слов и их длин: ");

printf("\n \t _________________________");

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

printf("\n \t %s (%d)",t[i],strlen(t[i]));

// Поиск нужного слова

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

if (strstr(t[i],"привет") !=0) k++;

// Вывод количества слов "привет"

if (k!=0)

printf("\n В строке слов: привет = %d",k);

else

printf("\n В строке слов: привет нет!");

getch();

}

Результат работы программы.

Введите строку:

Большой привет всем студентам.Особый привет передаем студентам,изучающим язык Си.

Исходная строка:

Большой привет всем студентам.Особый привет передаем студентам,изучающим язык Си.

Длина строки =81

Всего слов в тексте 11

Вывод слов и их длин:

_________________________

Большой (7)

привет (6)

всем (4)

студентам (9)

Особый (6)

привет (6)

передаем (8)

студентам (9)

изучающим (9)

язык (4)

Си (2)

В строке слов: привет = 2

Примечание.

В задаче были использованы следующие функции работы со строками:

  • gets() – ввод строки

  • puts() – вывод строки

  • strlen() – функция определения длины строки, не включая ‘\0’

  • strstr() – поиск подстроки в строке

  • strtok() - данная функция была использована для выделения слов из строки до разделяющего символа

// Выделяем первое слово и заносим в массив

t[l=0]=strtok(s,razd);

// Выделяем остальные слова и заносим в массив

while( (t[++l]=strtok(NULL,razd)) !=0);