Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Краткие итоги. 1. Для представления текстовой информации в С++ используются символьные данные и строки




1. Для представления текстовой информации в С++ используются символьные данные и строки.

2. Инициализировать строку можно как массив символов.

3. Признаком конца строки является нулевой символ.

4. Обратиться к элементу строки можно по индексу, который соответствует порядковому номеру элемента.

5. Нумерация элементов строки начинается с нуля. Размер строки определяется количеством входящих в нее символов.

6. В С++ предусмотрены различные способы ввода и вывода одиночных символов и строк. При считывании строки с клавиатуры признак конца строки добавляется автоматически.

7. Каждому символу однозначно соответствует его внутренний код.

 

Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах 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) не проверяют длину строки. Размер строки-приемника должен быть больше, чем размер источника на 1 символ (для символа '\0').

При вызове функции strncpy следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом '\0'. В этом случае такой символ надо дописывать в конец строки вручную.

Функции для работы со строками – файл stdlib.h
Функция Прототип Краткое описание действий
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).
ltoa char *ltoa (long v, char *str, int baz); преобразует длинное целое v в строку str. При изображении числа используется основание baz (2<=baz<=36).
ultoa char *ultoa (unsigned long v, char *str, int baz); преобразует беззнаковое длинное целое v в строку str
Функции для работы со строками – файл string.h
Функция Прототип Краткое описание действий
strcat char * strcat (char * sp, const char * si); приписывает строку si к строке sp (конкатенация строк)
strchr char * strchr (const char *str, int c); ищет в строке str первое вхождение символа с
strcmp int strcmp (const char *str1, const char *str2); сравнивает строки str1 и str2. Результат отрицателен, если str1<str2; равен нулю, если str1==str2, и положителен, если str1>str2 (сравнение беззнаковое)
strcpy char * strcpy (char * sp, const char * si); копирует байты строки si в строку sp
strcspn int strcspn (const char *str1, const char *str2); определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2
strdup char *strdup (const char *str); выделяет память и переносит в нее копию строки str
strlen unsigned strlen (const char *str); вычисляет длину строки str
strlwr char *strlwr (char *str); преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра
strncat char * strncat (char * sp, const char * si, int kol); приписывает kol символов строки si к строке sp (конкатенация)
strncmp int strncmp (const char *str1, const char *str2, int kol); сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1<str2; равен нулю, если str1==str2, и положителен, если str1>str2
strncpy char * strncpy (char * sp, const char * si, int kol); копирует kol символов строки si в строку sp
strnicmp int strnicmp (char *str1, const char *str2, int kol); сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров (см. функцию strncmp)
strnset char *strnset (char *str, int c, int kol); заменяет первые kol символов строки str символом c
strpbrk char * strpbrk (const char *str1, const char *str2); ищет в строке str1 первое появление любого из множества символов, входящих в строкуstr2
strrchr char * strrchr (const char *str, int c); ищет в строке str последнее вхождение символа с
strset char *strset (char *str, int c); заполняет строку str заданным символом c
strspn int strspn (const char *str1, const char *str2); определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2
strstr char * strstr (const char *str1, const char *str2); ищет в строке 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 в буквы верхнего регистра
         

 

Пример 74. Программа демонстрирует работу функций из файла stdlib.h

#include "stdafx.h"

#include <windows.h>

int main()

{

SetConsoleOutputCP(1251);

char sv[]="23.547",

si[]="1234",

sl[]="-112424",

st1[15], st2[25], st3[15];

long l,t=457821;

l=atol(sl);

printf("Преобразование строки в длинное целое число = %ld\n", l);

printf("Преобразование строки в вещественное число = %f\n", atof(sv));

printf("Преобразование строки в целое число = %d\n", atoi(si));

ultoa(t,st1,10);

printf("Преобразование длинного целого числа в строку = %s\n", st1);

printf("Преобразование длинного целого числа в строку = %s\n", ultoa(t,st2,2));

printf("Преобразование длинного целого числа в строку = %s\n", ultoa(t,st3,16));

system("pause");

return 0;

}

Результат выполнения программы:

Пример 75. Программа демонстрирует работу функций из файла string.h

int main()

{SetConsoleOutputCP(1251);

char st[50],sp[100],str[20]="МАМА МЫЛА РАМУ",

si[]="qwerty",

sl[]="qwerty",

sw[]="qwertyu";

int len=0, sravn1, 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);

printf("Сравнение строк: %s<%s результат %d\n", si,sw,strcmp(si,sw));

printf("Сравнение строк: %s>%s результат %d\n", sw,si,strcmp(sw,si));

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,'d'));

system("pause");

return 0;

}

Результат выполнения программы:

Из файла <ctype.h>:

int isdigit(int); // определяет, цифра или нет

int isalpha(int); //буква

int isupper(int); //буква в верхнем регистре

int islower(int); //буква в нижнем регистре

int isspace(int); //символ – разделитель

int ispunct(int); //символ пунктуации (ни один из вышеупомянутых)

int isalnum(int); //буква или цифра

int toupper(int); //перевод в верхний регистр

int tolower(int); //перевод в нижний регистр

 

Пример 75. Поиск множества неповторяющихся символов строки

int main()

{

SetConsoleOutputCP(1251);

char st[80];

int i,j,flag,len;

printf("Введите строку: ");

gets(st);

len=strlen(st); //длина строки

printf("Неповторяющиеся символы строки образуют множество: ");

for (i=1; i<len; i++)

{

flag=0; //флаг проверки на совпадение

for (j=0; j<i; j++) //сравнение символа с предыдущими

if (st[i]==st[j]) flag=1;

for (j=i+1; j<len; j++) //сравнение символа с последующими

if (st[i]==st[j]) flag=1;

if (flag==0) printf("%c", st[i]);

}

cout<<'\n';

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;

}

 




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 547; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.