- •Программирование и основы алгоритмизации Методические указания к лабораторным работам
- •Введение
- •Порядок выполнения лабораторных работ
- •Оформление отчетов к лабораторным работам
- •Лабораторная работа 1
- •Директивы препроцессора
- •Комментарии
- •Простые типы
- •Операции над простыми типами
- •Функции
- •Ввод-вывод в стиле с
- •Массивы
- •Варианты индивидуальных заданий
- •Лабораторная работа №2 Указатели. Связь массивов и указателей
- •Понятие указателя
- •Связь между массивами и указателями
- •Динамическое формирование массивов
- •Варианты индивидуальных заданий
- •Лабораторная работа №3 Обработка строк текста
- •Примеры программ
- •Варианты индивидуальных заданий
- •Лабораторная работа №4 Работа с файлами
- •Примеры программ
- •Варианты индивидуальных заданий
- •Заключение
- •Библиографический список
Лабораторная работа №3 Обработка строк текста
Цели работы:
Освоить работу со строками в стиле С (строки с завершающим нулем)
Освоить стандартную библиотеку для работы со строками string.h
Закрепить навыки работы с указателями
Краткие сведения об обработке строк
Строка в C – это последовательность символов, заканчивающаяся символом c кодом 0 (‘\0’). Строкой может быть как массив с элементами типа char, так и указатель на char.
Описание строк текста
char color[16] – создали массив символов без его заполнения.
char color [] = “blue” – создали массив из 5 элементов и заполнили его.
char *colorPtr = “blue” – то же самое, но при этом создается еще переменная-указатель colorPtr.
Ввод-вывод строк
Функция gets читает строку с консоли. Символ возврата каретки не становится частью строки. Например:
char s[256]; gets(s);
Функция gets требует подключения файла stdio.h. При использовании библиотеки iostream для ввода строк рекомендуется использовать функцию cin.getline. Например:
char s[256]; cin.getline(s, 256);
Обратим внимание, что стандартная операция ввода cin>>s прочитает символы строки до первого пробела.
Функция puts(s) выводит аргумент-строку s и символ конца строки.
Функции преобразования строк
atof(s) – преобразует строку s в тип double
atoi(s) – преобразует строку s в тип int
atol(s) – преобразует строку s в тип long
strtod (s, *ends) – преобразует строку s в тип double. При этом ends будет указывать на непреобразованный остаток исходной строки.
Функции операций над строками
strcpy(s1, s2) - копирует строку s2 в s1. Данная функция может быть использована для удаления или вставки символов. Например:
strcpy(s,s+1); - удалили первый символ из строки s
strcpy(s+1,s); - освободили место для вставки символа в начало строки.
strncpy(s1, s2, n) копирует не более чем n символов из s2 в s1
strcat(s1, s2) дописывает строку s2 в конец строки s1
strncat(s1, s2, n) дописывает строку s2 в конец строки s1, не более чем n символов
Функции сравнения строк
strcmp(s1, s) – сравнивает s1 с s.
Возвращает 0, <0, >0, если s1 соответственно =s, <s, >s.
strncmp(s1, s2, n) – сравнивает до n символов s1 с s. Возвращает 0, <0, >0, если s1 соответственно =s, <s, >s.
Функции поиска в строках
strchr(s, c) – находит позицию первого вхождения символа c в строку s и возвращает указатель на эту позицию.
strstr(s1, s2) – находит позицию первого вхождения строки s2 в s1.
Примеры программ
Пример 1. Удаление пробелов из заданной строки.
1 вариант программы, с созданием промежуточной строки
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{ int r=0,i=0; char s[80],s1[80];
printf("?");gets(s);
for(i=0;s[i]!=0;i++)
if (s[i]!=' ') {s1[r]=s[i];r++;}
s1[r]=0;
strcpy(s,s1);
puts(s); getch();
}
2 вариант, удаление пробелов выполняем с использованием функции strcpy. Обратите внимание, насколько сократился текст программы.
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{ char *n; char s[80],s1[80];
printf("?");gets(s);
while(n=strchr(s,' ')) strcpy(n,n+1);
puts(s);
getch();
}
Пример 2. Разделение строки на слова, в С для этого есть очень хорошая функция strtok, которая позволяет выделять слова с использованием любых разделителей (в примере разделитель пробел, но в strtok можно задать целую строку из разделителей, например, “ ,.!?”)
#include <string.h>
#include <stdio.h>
#include <iostream.h>
int main(void)
{ char input[80]; char *p;
cin.getline(input,80);
p = strtok(input, " ");
while (p)
{ printf("%s\n", p);
p = strtok(NULL, " ");
}
cin.get(); return 0;
}