Цель лекции: изучить синтаксис и семантику стандартных функций по работе со строками, научиться использовать в программах функции для работы со строками в языке C++
Для работы со строками используются библиотечные функции, прототипы которых находятся в stdlib.h и string.h.
В программах, в зависимости от типа, вызовы функций для работы со строками задаются в виде:
ИмяФ(СписокАргументов);
или
ИмяПерем=ИмяФ(СписокАргументов);
где ИмяФ – СписокАргументов – ИмяПерем – идентификатор соответствующего типа.
Например:
y=strlen(st); /*переменной y присвоить значение длины строки st*/
При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти.
int (unsigned ), поэтому, если число станет больше 128 (255), функция будет работать некорректно.strcpy (s, "");, но более эффективным будет присваивание *s=0;. Кроме того пустую строку можно инициализировать char s[10]=""; или char s[10]="\0";, но при этом размер строки должен быть задан.strncpy ) не проверяют '\0' ).При вызове функции следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом '\0'. В этом случае такой символ надо дописывать в конец строки вручную.
| Функция | Прототип | Краткое описание действий |
|---|---|---|
atof |
double atof (const char *str); |
преобразует строку str в double |
atoi |
int atoi (const char *str); |
преобразует строку str в целое число типа int |
atol |
long atol (const char *str); |
преобразует строку str в целое число типа long |
itoa |
char *itoa (int v, char *str, int baz); |
преобразует целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). Для отрицательного числа и baz =10 первый символ "минус" (–). |
ltoa |
char *ltoa (long v, char *str, int baz); |
преобразует длинное целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). |
ultoa |
char *ultoa ( |
преобразует беззнаковое длинное целое v в строку str |
| Функция | Прототип | Краткое описание действий |
|---|---|---|
|
char * |
приписывает строку к строке ( |
|
char * |
ищет в строке str первое вхождение символа с |
|
int |
сравнивает строки str1 и str2. Результат отрицателен, если str1<str2 ; равен нулю, если str1==str2, и положителен, если str1>str2 (сравнение беззнаковое) |
|
char * |
копирует байты строки в строку |
|
int |
определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2 |
strdup |
char *strdup (const char *str); |
выделяет память и переносит в нее копию строки str |
|
|
вычисляет str |
strlwr |
char *strlwr (char *str); |
преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра |
|
char * |
приписывает kol символов строки к строке ( |
|
int |
сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1<str2 ; равен нулю, если str1==str2, и положителен, если str1>str2 |
|
char * |
копирует kol символов строки в строку ("хвост" отбрасывается или дополняется пробелами) |
strnicmp |
int strnicmp (char *str1, const char *str2, int kol); |
сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров (см. функцию ) |
strnset |
char *strnset (char *str, int c, int kol); |
заменяет первые kol символов строки str символом c |
|
char * |
ищет в строке str1 первое появление любого из множества символов, входящих в строку str2 |
|
char * |
ищет в строке str последнее вхождение символа с |
strset |
char *strset (char *str, int c); |
заполняет строку str заданным символом c |
|
int |
определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2 |
|
char * |
ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2 |
strtod |
double strtod (const char *str, char **endptr); |
преобразует str в число двойной точности. Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
strtok |
char *strtok (char *str1, const char *str2); |
ищет в строке str1 |
strtol |
long strtol (const char *str, char **endptr, int baz); |
преобразует str к значению "длинное число" с основанием baz (2<=baz<=36). Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
strupr |
char *strupr (char *str); |
преобразует буквы нижнего регистра в строке str в буквы верхнего регистра |
Сравнение строк с помощью функции осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в
При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти.
Пример 1.
//Программа демонстрирует работу функций из файла stdlib.h
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char sv[]="23.547",
si[]="1234",
sl[]="-112424",
st1[15],st2[25],st3[15];
double v;
int i;
long l,t=457821;
v=atof(sv);
printf("Преобразование строки в вещественное число = %f\n",v);
i=atoi(si);
printf("Преобразование строки в целое число = %d\n",i);
l=atol(sl);
printf("Преобразование строки в длинное целое число = %ld\n",l);
printf("Преобразование длинного целого числа в строку = %s\n",
ultoa(t,st1,10));
printf("Преобразование длинного целого числа в строку = %s\n",
ultoa(t,st2,2));
printf("Преобразование длинного целого числа в строку = %s\n",
ultoa(t,st3,16));
system("pause");
return 0;
}
Пример 2.
//Программа демонстрирует работу функций из файла string.h
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char st[50],sp[100],str[]="",
si[]="qwerty",
sl[]="qwerty",
sw[]="qwertyu";
int len=0, sravn1, sravn2, sravn3, kol=5;
printf("Введите строку: ");
gets(st);
len=strlen(st); printf("Длина строки = %d\n",len);
printf("Конкатенация строк: %s\n",strcat(st,"12cdb"));
sravn1=strcmp(si,sl);
printf("Сравнение строк: %s==%s результат %d\n",
si,sl,sravn1);
sravn2=strcmp(si,sw);
printf("Сравнение строк: %s<%s результат %d\n",
si,sw,sravn2);
sravn3=strcmp(sw,si);
printf("Сравнение строк: %s>%s результат %d\n",
sw,si,sravn3);
printf("Копирование байтов: %s\n",strcpy(sp,st));
printf("Преобразование букв нижнего регистра в верхний: %s\n",
strupr(st));
printf("Преобразование букв верхнего регистра в нижний: %s\n",
strlwr(st));
printf("Копирование %d символов в другую строку: %s\n",
kol,strncpy(str,st,kol));
printf("Поиск в строке первого появления символа из другой строки:
%s\n",strpbrk(st,si));
printf("Поиск в строке последнее вхождение заданного
символа: %s\n",strrchr(st,'t'));
system("pause");
return 0;
}
Пример 3.
//Поиск множества неповторяющихся символов строки
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char st[80];
int i,j,flag,len;
printf("Введите строку: ");
gets(st);
len=strlen(st); //длина строки
printf("Неповторяющиеся символы строки образуют множество: ");
for (i=0;i<len;i++){
flag=0; //флаг проверки на совпадение
for (j=0;j<i;j++) //сравнение символа с предыдущими
if (st[i]==st[j]) flag=1;
if (flag==0)printf("%c",st[i]);
}
system("pause");
return 0;
}
Пример 4.
/*Удаление лишних левых и внутренних пробелов в строке при выводе*/
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char st[80];
int i=0,len;
printf("Введите строку: ");
gets(st);
len=strlen(st);//длина строки
printf("Преобразованная строка: ");
//Удалены лишние пробелы слева
while (st[i++]==' ');
//Удалены лишние пробелы внутри строки
for (--i;i<len;i++)
if ((st[i]!=' ')||(st[i+1]!=' '))
printf("%c",st[i]); //если рядом два пробела
system("pause");
return 0;
}
Конкатенация строк – это результат последовательного
Лексикографический порядок – правило сравнения символов, основанное на величине кода внутреннего представления каждого символа.
Пустая строка – это строка единичной длины, содержащая только символ конца строки.
Сравнение строк – это результат проверки выполнения отношения "больше", "меньше" или "равно" над строками.
Стандартные функции по работе со строками – это функции обработки строк, прототипы которых входят в
stdlib.h и string.h.Цель работы: изучить синтаксис и семантику стандартных функций по работе со строками, научиться использовать в программах функции для работы со строками в языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе одну или несколько строк символов (в зависимости от постановки задачи), выполняет обработку строк в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является максимальный размер строковых данных в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 8.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
'w' встречается в каждом слове.Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами обработки строковых и символьных данных, используя библиотечные функции обработки строковых данных в языке С++.
Следует реализовать каждое задание в соответствии с приведенными этапами:
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
Контрольные вопросы
Цель лекции: изучить синтаксис и семантику стандартных функций по работе со строками, научиться использовать в программах функции для работы со строками в языке C++
Для работы со строками используются библиотечные функции, прототипы которых находятся в stdlib.h и string.h.
В программах, в зависимости от типа, вызовы функций для работы со строками задаются в виде:
ИмяФ(СписокАргументов);
или
ИмяПерем=ИмяФ(СписокАргументов);
где ИмяФ – СписокАргументов – ИмяПерем – идентификатор соответствующего типа.
Например:
y=strlen(st); /*переменной y присвоить значение длины строки st*/
При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти.
int (unsigned ), поэтому, если число станет больше 128 (255), функция будет работать некорректно.strcpy (s, "");, но более эффективным будет присваивание *s=0;. Кроме того пустую строку можно инициализировать char s[10]=""; или char s[10]="\0";, но при этом размер строки должен быть задан.strncpy ) не проверяют '\0' ).При вызове функции следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом '\0'. В этом случае такой символ надо дописывать в конец строки вручную.
| Функция | Прототип | Краткое описание действий |
|---|---|---|
atof |
double atof (const char *str); |
преобразует строку str в double |
atoi |
int atoi (const char *str); |
преобразует строку str в целое число типа int |
atol |
long atol (const char *str); |
преобразует строку str в целое число типа long |
itoa |
char *itoa (int v, char *str, int baz); |
преобразует целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). Для отрицательного числа и baz =10 первый символ "минус" (–). |
ltoa |
char *ltoa (long v, char *str, int baz); |
преобразует длинное целое v в строку str. При изображении числа используется основание baz (2<=baz<=36). |
ultoa |
char *ultoa ( |
преобразует беззнаковое длинное целое v в строку str |
| Функция | Прототип | Краткое описание действий |
|---|---|---|
|
char * |
приписывает строку к строке ( |
|
char * |
ищет в строке str первое вхождение символа с |
|
int |
сравнивает строки str1 и str2. Результат отрицателен, если str1<str2 ; равен нулю, если str1==str2, и положителен, если str1>str2 (сравнение беззнаковое) |
|
char * |
копирует байты строки в строку |
|
int |
определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2 |
strdup |
char *strdup (const char *str); |
выделяет память и переносит в нее копию строки str |
|
|
вычисляет str |
strlwr |
char *strlwr (char *str); |
преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра |
|
char * |
приписывает kol символов строки к строке ( |
|
int |
сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1<str2 ; равен нулю, если str1==str2, и положителен, если str1>str2 |
|
char * |
копирует kol символов строки в строку ("хвост" отбрасывается или дополняется пробелами) |
strnicmp |
int strnicmp (char *str1, const char *str2, int kol); |
сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров (см. функцию ) |
strnset |
char *strnset (char *str, int c, int kol); |
заменяет первые kol символов строки str символом c |
|
char * |
ищет в строке str1 первое появление любого из множества символов, входящих в строку str2 |
|
char * |
ищет в строке str последнее вхождение символа с |
strset |
char *strset (char *str, int c); |
заполняет строку str заданным символом c |
|
int |
определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2 |
|
char * |
ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2 |
strtod |
double strtod (const char *str, char **endptr); |
преобразует str в число двойной точности. Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
strtok |
char *strtok (char *str1, const char *str2); |
ищет в строке str1 |
strtol |
long strtol (const char *str, char **endptr, int baz); |
преобразует str к значению "длинное число" с основанием baz (2<=baz<=36). Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str |
strupr |
char *strupr (char *str); |
преобразует буквы нижнего регистра в строке str в буквы верхнего регистра |
Сравнение строк с помощью функции осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в
При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти.
Пример 1.
//Программа демонстрирует работу функций из файла stdlib.h
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char sv[]="23.547",
si[]="1234",
sl[]="-112424",
st1[15],st2[25],st3[15];
double v;
int i;
long l,t=457821;
v=atof(sv);
printf("Преобразование строки в вещественное число = %f\n",v);
i=atoi(si);
printf("Преобразование строки в целое число = %d\n",i);
l=atol(sl);
printf("Преобразование строки в длинное целое число = %ld\n",l);
printf("Преобразование длинного целого числа в строку = %s\n",
ultoa(t,st1,10));
printf("Преобразование длинного целого числа в строку = %s\n",
ultoa(t,st2,2));
printf("Преобразование длинного целого числа в строку = %s\n",
ultoa(t,st3,16));
system("pause");
return 0;
}
Пример 2.
//Программа демонстрирует работу функций из файла string.h
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char st[50],sp[100],str[]="",
si[]="qwerty",
sl[]="qwerty",
sw[]="qwertyu";
int len=0, sravn1, sravn2, sravn3, kol=5;
printf("Введите строку: ");
gets(st);
len=strlen(st); printf("Длина строки = %d\n",len);
printf("Конкатенация строк: %s\n",strcat(st,"12cdb"));
sravn1=strcmp(si,sl);
printf("Сравнение строк: %s==%s результат %d\n",
si,sl,sravn1);
sravn2=strcmp(si,sw);
printf("Сравнение строк: %s<%s результат %d\n",
si,sw,sravn2);
sravn3=strcmp(sw,si);
printf("Сравнение строк: %s>%s результат %d\n",
sw,si,sravn3);
printf("Копирование байтов: %s\n",strcpy(sp,st));
printf("Преобразование букв нижнего регистра в верхний: %s\n",
strupr(st));
printf("Преобразование букв верхнего регистра в нижний: %s\n",
strlwr(st));
printf("Копирование %d символов в другую строку: %s\n",
kol,strncpy(str,st,kol));
printf("Поиск в строке первого появления символа из другой строки:
%s\n",strpbrk(st,si));
printf("Поиск в строке последнее вхождение заданного
символа: %s\n",strrchr(st,'t'));
system("pause");
return 0;
}
Пример 3.
//Поиск множества неповторяющихся символов строки
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char st[80];
int i,j,flag,len;
printf("Введите строку: ");
gets(st);
len=strlen(st); //длина строки
printf("Неповторяющиеся символы строки образуют множество: ");
for (i=0;i<len;i++){
flag=0; //флаг проверки на совпадение
for (j=0;j<i;j++) //сравнение символа с предыдущими
if (st[i]==st[j]) flag=1;
if (flag==0)printf("%c",st[i]);
}
system("pause");
return 0;
}
Пример 4.
/*Удаление лишних левых и внутренних пробелов в строке при выводе*/
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
char st[80];
int i=0,len;
printf("Введите строку: ");
gets(st);
len=strlen(st);//длина строки
printf("Преобразованная строка: ");
//Удалены лишние пробелы слева
while (st[i++]==' ');
//Удалены лишние пробелы внутри строки
for (--i;i<len;i++)
if ((st[i]!=' ')||(st[i+1]!=' '))
printf("%c",st[i]); //если рядом два пробела
system("pause");
return 0;
}
Конкатенация строк – это результат последовательного
Лексикографический порядок – правило сравнения символов, основанное на величине кода внутреннего представления каждого символа.
Пустая строка – это строка единичной длины, содержащая только символ конца строки.
Сравнение строк – это результат проверки выполнения отношения "больше", "меньше" или "равно" над строками.
Стандартные функции по работе со строками – это функции обработки строк, прототипы которых входят в
stdlib.h и string.h.Цель работы: изучить синтаксис и семантику стандартных функций по работе со строками, научиться использовать в программах функции для работы со строками в языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе одну или несколько строк символов (в зависимости от постановки задачи), выполняет обработку строк в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является максимальный размер строковых данных в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 8.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
'w' встречается в каждом слове.Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами обработки строковых и символьных данных, используя библиотечные функции обработки строковых данных в языке С++.
Следует реализовать каждое задание в соответствии с приведенными этапами:
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
Контрольные вопросы
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.