- •Глава 5. Строки
- •Пример составления программы на языке с.
- •Задания
- •Глава 6. Функции.
- •Примеры составления программ на языке с.
- •1 Выполнение программы:
- •2 Выполнение программы:
- •Задания
- •6.1 Простейшие функции, определенные пользователем.
- •6. 2 Обработка одномерных массивов с использованием функций.
- •6.3. Обработка двумерных массивов с помощью функций.
- •6.4 Рекурсии
Глава 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);