Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С_глава2.doc
Скачиваний:
1
Добавлен:
16.12.2018
Размер:
167.94 Кб
Скачать

Стандартные функции обработки строк

Библиотека языка С++ содержит функции обработки строк. Прототипы этих функций находятся в файле string.h, поэтому в начале программы необходимо его подключение. Рассмотрим наиболее полезные функции strlen(), strcpy(), strcat(), strcmp(), strch():

int strlen(char *s) – определяет длину строки s, возвращает количество символов в строке, включая и последний ‘\0’;

char *strcpy(char *dest, const char *src) – копирует строку src в dest, возвращает dest;

char *strcat(char *s1, char *s2) – присоединяет строку s2 в конец строки s1 ( предполагается, что длина строки s1 позволяет это сделать), возвращает указатель на объединенную строку (s1);

int strcmp(char *s1, char *s2) – сравнивает две строки s1 и s2 , возвращает значение, полученное путем вычитания первых несовпадающих символов из s1 и s2;

char *strchr(char *s, int c) – находит в строке первое вхождение символа c, возвращает указатель на этот символ;

int strcspn(char *s1, char *s2) – находит длину отрезка строки s1, содержащего символы, не входящие в множество символов строки s2.

Пример 1.

Ввести две строки. Сравнить их. Объединить в одну. Найти первое вхождение первого символа первой строки во второй строке. Скопировать вторую строку в первую и вывести на экран первую.

#include <stdio.h>

#include <string.h>

int main()

{

char text1[81], text2[20], *ps, c;

int j;

puts(“Введите первую строку символов”);

gets(text1);

puts(“Введите вторую строку символов”);

gets(text2);

/* Иллюстрация работы функции strcmp() */

j= strcmp(text1,text2);

if (j==0) puts(“Cтроки полностью совпадают”);

if (j<0) puts(“Первая строка лексикографически меньше второй”);

if (j>0) puts(“Первая строка лексикографически больше второй”);

/* Объединение строк в одну c проверкой необходимой памяти */

if (strlen(text1)+strlen(text2)+1<81) { strcat(text1,text2);

puts(“Результат объединения двух строк”);

puts(text1); } /* Можно иначе: ps= strcat(text1,text2); puts(ps); */

/* Поиск первого символа первой строки во второй */

c= text1[0];

ps=strchr(text2,c); /* ps – указатель на символ c в строке text2,

text2 –указатель на нулевой символ строки text2,

(ps-text2+1) – номер позиции символа с в строке text2 */

if (ps)

printf("Символ %c в строке %s находится на %d месте \n”, c, text2, ps-text2+1);

else

printf("Символ %c не найден в строке %s\n", c, text2);

strcpy(text1, text2);

puts(text1);

}

Пример 2.

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

#include <stdio.h>

#include <string.h>

int main()

{

char text1[81], *ps;

int ls, n=-1;

puts("Введите строку символов");

gets(text1);

ps = &text1[0];

/* Если строка символов начинается с пробелов, нужно их пропустить, прежде чем начинать считать слова */

if (*ps ==’ ‘) do ps+=1; while (*ps ==’ ‘);

/* В переменной n подсчитываем количество слов в строке */

do { ls=strcspn(ps," "); ps+=ls+1; n+=1; } while ( *ps !=’\0’);

printf (“n=%d \n”, n);

return 0;

}

Домашнее задание

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

Вычислительный зал

Ввести с клавиатуры строку символов. Сравнить ее с заданной в программе. Используя указатели для доступа к элементам строки, заменить некоторые символы во введенной строке и вывести ее на экран. Вычислить длину строки.

Дополнительные задачи

1. Ввести с клавиатуры две строки. Сравнить их. Вывести на экран номер позиции первого несовпадающего символа.

2. Ввести три строки. Найти их длины. Объединить их, найти длину получившейся строки. Найти номер позиции первого элемента второй строки в объединенной строке.

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

4. Ввести строку, состоящую из букв, цифр и пробелов. Определить количество слов в строке. Слова отделены друг от друга пробелами.

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

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

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

8. Дана строка символов. Сформируйте строку из символов, с которых начинаются слова этой строки.

9. Дана строка символов, разделенных пробелами, запятыми, точками. Найдите самое длинное слово.

10.Ввести строку, представляющую собой номер телефона. Выделить код города и номер линии. Например, для телефона (095) 531-00-00 код города –095, номер линии – 531.

11.Ввести строку, состоящую из букв, цифр и пробелов. Определить количество слов в строке. Слова отделены друг от друга пробелами.