Помощь в учёбе, очень быстро...
Работаем вместе до победы

Обработка строк. 
Технологии и методы программирования

РефератПомощь в написанииУзнать стоимостьмоей работы

Функция ищет строку2 в строке 1 и возвращает указатель на ее первое вхождение (ячейку памяти с первым символом подстроки) или NULL в случае отсутствия строки2 в строке 1. Если строка2 является пустой, то функция возвращает указатель на строку 1. В языке С нет специального типа данных, предназначенного для хранения строк. Строковые данные представляются в виде массива символов, оканчивающегося… Читать ещё >

Обработка строк. Технологии и методы программирования (реферат, курсовая, диплом, контрольная)

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

Например, слово Program будет храниться в памяти в виде:

Р'.

1 V.

г.

1 V.

О.

'g'.

I ?

Г.

V V.

а.

" 1 m.

Для хранения строковых данных используются статические и динамические массивы.

Для работы со строками в языке С используется набор функций, прототипы которых описаны в файле string.h.

Функция sprintf записывает форматированные данные в массив символов. Синтаксис функции:

int sprintf (char *, const char *.

[, / … ]);

Форматированная строка выводится в область памяти, которая задается указателем. Параметры, формат и аргументы соответствуют аналогичным параметрам функции printf.

Функция sscanf осуществляет чтение данных из строки по заданному формату. Синтаксис функции:

int sscanf (const char *, const char *.

[,, … ]);

Исходные данные считываются из области памяти, которая задастся указателем. Параметры формат и аргументы соответствуют аналогичным параметрам функции scanf. Аргументы, в которых считываются данные, задаются указателями на соответствующие переменные.

Функция stamp выполняет сравнение строк путем последовательного сравнения символов, расположенных в строках в одинаковых позициях. Синтаксис функции:

int strcmp (const char *, const char *);

Равными считаются строки, имеющие одинаковую длину и состоящие из одинаковых символов, расположенных в одинаковом порядке. Меньшей считается строка, у которой меньше код первого отличающегося символа. При совпадении символов, но разной длине, меньшей считается та строка, которая короче.

Функция возвращает значение:

  • • 0, если строки равны;
  • • -1, если первая строка меньше второй;
  • • 1, если первая строка больше второй.

Сравнение строк производится с учетом регистра. Для сравнения без учета регистра используется функция stricmp, имеющая такой же синтаксис и работающая аналогично.

Функция street выполняет объединение двух строк. Синтаксис функции:

char *strcat (char *, const char *);

Сформированная в результате работы функции строка содержит строку 1, в конец которой добавлена строка2. Результат записывается в строку1.

Функция strepy копирует одну строку в другую. Синтаксис функции:

char *strcpy (char *, const char *);

Строка2 копируется в область памяти, заданную указателем на строку1.

Функция strlen вычисляет длину строки в символах. Терминирующий нуль в число символов не включается. Синтаксис функции:

size_t strlen (const char *);

Функция возвращает количество символов в строке 1.

Функция strstr ищет одну строку в другой. Синтаксис функции:

char *strstr< constchar *, constchar *);

Функция ищет строку2 в строке 1 и возвращает указатель на ее первое вхождение (ячейку памяти с первым символом подстроки) или NULL в случае отсутствия строки2 в строке 1. Если строка2 является пустой, то функция возвращает указатель на строку 1.

Для поиска в строке используются также функции, синтаксис которых аналогичен strstr.

  • strspn — поиск первого вхождения любой подстроки строки2 в строке1;
  • strcspn — поиск в строке 1 первого символа, содержащегося в строкс2 (возвращает индекс символа);
  • strspnp — поиск в строке 1 первого символа, не содержащегося в строке2;
  • strchr — поиск в строке 1 первого вхождения символа, заданного вторым аргументом функции;
  • strpbrk — поиск в строке 1 первого символа, содержащийся в строке2 (возвращает указатель на ячейку памяти, хранящую этот символ);
  • strrchr — поиск в строке! последнего вхождения символа, заданного вторым аргументом функции.

Функция strtok разбивает строку на подстроки. Синтаксис функции:

char *strtok (char *, const char *);

В качестве разделителей подстрок используются символы, входящие в строку2. Если указатель на строку1 не равен NULL, то разбиение производится с начала строки 1, и функция возвращает указатель на первую найденную подстроку. Если указатель на строку 1 равен NULL, то процесс разбиения продолжается, функция возвращает указатель на очередную выделенную подстроку или NULL, если больше подстрок нет.

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

  • stmcmp — сравнение первых п символов двух строк с учетом регистра;
  • stmicmp — сравнение первых п символов двух строк без учета регистра;
  • stmcat — объединение первых п символов двух строк;
  • stmcpy — копирование п первых символов исходной строки в результирующую строку.

Перечислим еще несколько полезных функций работы со строками:

  • strlwr — смена регистра всех символов строки на нижний (строчные буквы);
  • strupr — смена регистра всех символов строки на верхний (заглавные буквы);
  • strset — заполнение строки символом с заданным кодом (все символы данной строки будут заменены на заданный символ);
  • stmset — заполнение первых п символов строки символом с заданным кодом;
  • strrev — реверсирование строки (запись символов строки в обратном порядке).

Пример 5.9.1

Ввести предложение, в котором все слова разделены ровно одним пробелом. Подсчитать количество слов в предложении.

Количество слов в предложении будет на одно больше количества пробелов, так как последнее слово пробелом не заканчивается.

#include.

#include int main{).

{.

char si [80], *p; // объявление массива символов.

// и указателя.

int n, k;

fgets (si, sizeof (sl), stdin); // ввод предложения.

n = strlen (sl); // n — количество символов // в предложении.

k = 0;

р = si; // указатель установлен на начало // предложения for (р = si; р < sl+n; р++).

// указатель перемещается от первого до последнего // символа предложения.

if (*р == ' ') к++; // подсчет количества пробелов.

printf («%d «# k+1); return 0;

Пример 5.9.2

Ввести предложение, ввести два символа. Заменить в предложении все первые символы вторыми.

#include.

#include int main ().

{.

char si [80], *p; // si — исходное предложение.

char sml, sm2; // sml — заменяемый символ,.

// s2 — заменяющий символ.

int n, к;

fgets (sl, sizeof (sl), stdin); scant («%c %c», &sml, &sm2); n = strlen (si); к = 0;

for (p = si; p < si + n; p++) // проход по всем.

// символам.

if (*p == sml) // запись заменяемого символа *p = sm2; // вместо замещаемого.

printf («%s», si); return 0;

}.

Пример 5.9.3.

Ввести предложение, в котором слова разделены пробелами. Вывести самое длинное слово.

#include.

#include int main ().

{.

char si[80], s2[80]; // si — исходное предложение,.

// s2 — искомое слово fgets (si, sizeof (si), stdin); char *pStr = si, *pWord = NULL; int maxLength = 0; while (pWord = strtok (pStr, ««)).

// выделение слов, разделенных пробелами.

{.

int length = strlen (pWord);

if (length>maxLength) // если длина очередного.

// слова больше максимума.

{.

strcpy (s2, pWord); // слово копируется в s2 maxLength = length; // меняется максимальная.

// длина слова.

}.

// указатель устанавливается на NULL для продолжения // разбиения предложения на слова pStr = NULL;

}.

printf («%s %d», s2, maxLength); // вывод результатов return 0;

Показать весь текст
Заполнить форму текущей работой