Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по ПОА 2012.doc
Скачиваний:
7
Добавлен:
08.11.2019
Размер:
257.02 Кб
Скачать

Лабораторная работа №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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]