• 2
  • 3
  • 4
  • 6

Символы и строки в С++

 
 

Символ – элементарная единица, некоторый набор которых несет определенный смысл. В языке программирования С++ предусмотрено использование символьных констант. Символьная константа – это целочисленное значение (типа int) представленное в виде символа, заключённого в одинарные кавычки, например 'a'. В таблице ASCII представлены символы и их целочисленные значения.

1
2
3
4
// объявления символьной переменной
char symbol = 'a';
//  где symbol – имя переменной типа  char
//  char – тип данных для хранения символов

Строки в С++ представляются как массивы элементов типа char, заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.

\0  — символ нуль-терминатора.

Символьные строки состоят из набора символьных констант заключённых в двойные кавычки. При объявлении строкового массива необходимо учитывать наличие в конце строки нуль-терминатора, и отводить дополнительный байт под него.

1
2
3
4
// пример объявления строки
char string[10];
//  где string – имя строковой переменной              
//      10 – размер массива, то есть в данной строке может поместиться 9 символов , последнее место отводится под нуль-терминатор.

Строка при объявлении  может быть инициализирована начальным значением, например, так:

1
char string[10] = "abcdefghf";

Если подсчитать кол-во символов в двойных кавычках после символа равно их окажется 9, а размер строки 10 символов,  последнее  место отводится под нуль–терминатор, причём компилятор сам добавит его в конец строки.

1
2
3
// посимвольная инициализация строки:
char string[10] = {'a''b''c''d''e''f''g''h''f''\0'};
// десятый  символ это  нуль-терминатор.

При объявлении строки не обязательно указывать её размер, но при этом обязательно нужно её инициализировать начальным значением. Тогда размер строки определится автоматически и в конец строки добавится нуль-терминатор.

1
2
3
//инициализация строки без указания размера
char string[] = "abcdefghf";
//всё то же самое только размер не указываем.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// symbols.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    char string[] = "this is string - "// объявление и инициализация строки
    cout << "Enter the string: ";
    char in_string[500]; // строковый массив для ввода 
    gets(in_string); // функция gets() считывает все введённые символы с пробелами до тех пор, пока не будет нажата клавиша Enter 
    cout << string << in_string << endl; // вывод строкового значения
    system("pause");
    return 0;
}

В строке 12 с помощью функции gets() считаются все введённые символы с пробелами до тех пор, пока во вводимом потоке не встретится код клавиши enter. Если использовать операцию cin то из всего введённого считается последовательность символов до первого пробела (см. Рисунок 1).

CppStudio.com
Enter the string: CppStudio.com
this is string - CppStudio.com
Для продолжения нажмите любую клавишу . . .

Рисунок 1 — Символы и строки

Таблица 1 — Функции для работы со строками и символами
ФункцияПояснение
strlen(имя_строки) определяет длину указанной строки, без учёта нуль-символа
Копирование строк
strcpy(s1,s2) выполняет побайтное копирование символов из строки  s2 в строку s1
strncpy(s1,s2, n) выполняет побайтное копирование n символов из строки  s2 в строку s1. возвращает значения s1
Конкатенация строк
strcat(s1,s2) объединяет строку s2 со строкой s1. Результат сохраняется в s1
strncat(s1,s2,n) объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1
Сравнение строк
strcmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0  — если s1>s2 С учётом регистра
strncmp(s1,s2,n) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0  — если s1>s2 С учётом регистра
stricmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0  — если s1>s2 Без учёта регистра
strnicmp(s1,s2,n) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2,  <0 — если s1>s2 Без учёта регистра
Обработка символов
isalnum(c) возвращает значение true, если с является буквой или цифрой, и false в других случаях
isalpha(c) возвращает значение true, если с является буквой,  и false в других случаях
isdigit(c) возвращает значение true, если с является цифрой, и false в других случаях
islower(c) возвращает значение true, если с является буквой нижнего регистра, и false в других случаях
isupper(c) возвращает значение true, если с является буквой верхнего регистра, и false в других случаях
isspace(c) возвращает значение true, если с является пробелом, и false в других случаях
toupper(c) если символ с, является символом нижнего регистра, то функция возвращает преобразованный символ с в верхнем регистре, иначе символ возвращается без изменений.
Функции поиска
strchr(s,c) поиск первого вхождения символа с в строке sВ случае удачного поиска возвращает указатель на место первого вхождения символа сЕсли символ не найден, то возвращается ноль.
strcspn(s1,s2) определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2
strspn(s1,s2) возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2
strprbk(s1,s2) Возвращает указатель  первого вхождения любого символа строки s2 в строке s1
Функции преобразования
atof(s1) преобразует строку s1 в тип double
atoi(s1) преобразует строку s1 в тип int
atol(s1) преобразует строку s1 в тип long int
Функции стандартной библиотеки ввода/вывода <stdio>
getchar(с) считывает символ с со стандартного потока ввода, возвращает символ в формате int
gets(s) считывает поток символов со стандартного устройства ввода в строку s до тех пор, пока не будет нажата клавиша ENTER

Разработаем несколько программ, используя функции для работы со строками и символами.

 

Копирование строк

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// str_cpy.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    char s2[27] = "Counter-Strike 1.6 forever";          // инициализация строки s2
    char s1[27];                                         // резервируем строку для функции strcpy()
    cout << "strcpy(s1,s2) = " << strcpy(s1,s2) << endl; // содержимое строки s2 скопировалось в строку s1, возвращается указатель на s1
    cout << "s1=             " << s1            << endl; // вывод содержимого строки s1
    char s3[7];                                          // резервируем строку для следующей функции
    cout << strncpy(s3, s2, 7) << endl;      // копируем 7 символов из строки s2 в строку s3
    system("pause");
    return 0;
}

В строках 9, 10 создаём строковые массивы на 27 символов, словосочетание "Counter-Strike 1.6 forever" содержит 26 символов, последнее место в массиве займет нуль-символ. В строке 11 функция strcpy(s1,s2) копирует  значение строки  s2 в строку s1 и возвращает указатель на строку s1. Если строка s1 будет меньше строки s2, то скопируется то количество символов, которое вместится в  строку s2. Строка 10 всего лишь показывает, что в строке s1 содержится скопированное значение. В строке 14 функция strncpy(s3, s2, sizeof(s3)) выполняет копирование 7 символов строки s2 в строку s3 (см. Рисунок 2). 

CppStudio.com
strcpy(s1,s2) = Counter-Strike 1.6 forever
s1=             Counter-Strike 1.6 forever
CounterCounter-Strike 1.6 forever
Для продолжения нажмите любую клавишу . . .

Рисунок 2 — Символы и строки

Конкатенация строк

Использование функций strcat() и strncat(), для объединения строк, то есть для их конкатенации.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// str_cat.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    char s1[30] = "I am ";
    char s2[] = "programmer on the C++!!!!";
    cout << strcat(s1,s2) << endl;               // объединяем строки s1 и s2, результат сохраняется в строке s1
    char s3[23] = "I am a good ";
    cout << strncat(s3,s2,10) <<  "!!!" << endl; // объединяем 10 символов строки s2 со строкой s3
    system("pause");
    return 0;
}

В строке 11 функция strcat(s1,s2) объединяет строки s1 и s2, результат сохраняется в строке s1. По этому при объявлении строки s1 её размер установлен на 30 символов. В строке 13 функция strncat(s3,s2,10) объединяет 10 символов из строки s2(как раз помещается слово programmer) со строкой s3, результат сохраняется в строке s3. И по этому размер строки s3 также задан фиксировано (см. Рисунок 3).

CppStudio.com
I am programmer on the C++!!!!
I am a good programmer!!!
Для продолжения нажмите любую клавишу . . .

Рисунок 3 — Символы и строки

Сравнение строк

Рассмотрим работу функции strcmp(), остальные функции используются аналогично, так что каждую рассматривать не будем.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// str_cmp.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
int main(int argc, char* argv[])
{
    char s1[] = "www.cppstudio.com";
    char s2[] = "http://www.cppstudio.com";
    cout << " s1 == s1 -> " << setw(2) << strcmp(s1,s1) << endl; // строка s1 = s1
    cout << " s1 <  s2 -> " << setw(2) << strcmp(s1,s2) << endl; // строка s1 < s2
    cout << " s2 >  s1 -> " << setw(2) << strcmp(s2,s1) << endl; // строка s2 > s1
    system("pause");
    return 0;
}

В строках 12, 13, 14 функция strcmp() выполняет сравнение строк, в различном порядке, таким образом были рассмотрены все возможные варианты работы данной функции. В первом случае строку s1 сравнивали с самой собой соответственно и результат равен 0. Во втором случае строка s1 оказалась меньше строки s2 поэтому результат равен 1. В третьем случае строка s1 по-прежнему меньше строки s2, но мы поменяли эти строки местами, таким образом, порядок параметров функции изменился и результат стал равен -1 (см. Рисунок 4).

CppStudio.com
 s1 == s1 ->  0
 s1 <  s2 ->  1
 s2 >  s1 -> -1
Для продолжения нажмите любую клавишу . . .

Рисунок 4 — Символы и строки

Обработка символов

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// issss.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    char symbol    = 'd'// буква
    char digit     = '9'// цифра
    char space     = ' '// пробел
    char character = '#'// знак
    // функция isalnum() проверяет является ли её аргумент буквой или цифрой
    cout << symbol    << " - it is digit or alpha?: "isalnum(symbol)    ? cout << "true\n": cout << "false\n";
    // функция isalpha() проверяет является ли её аргумент буквой
    cout << symbol    << " - it is alpha?:          "isalpha(symbol)    ? cout << "true\n": cout << "false\n";
    // функция isdigit() проверяет является ли её аргумент цифрой
    cout << digit     << " - it is digit?:          "isdigit(digit)     ? cout << "true\n": cout << "false\n";
    // функция isspace() проверяет является ли её аргумент пробелом
    cout << space     << " - it is space?:          "isspace(space)     ? cout << "true\n": cout << "false\n";
    // функция islower() проверяет является ли её аргумент буквой нижнего регистра
    cout << symbol    << " - it is lower alpha?:    "islower(symbol)    ? cout << "true\n": cout << "false\n";
    // функция isupper() проверяет является ли её аргумент буквой верхнего регистра
    cout << symbol    << " - it is upper alpha?:    "isupper(symbol) ? cout << "true\n": cout << "false\n";
    system("pause");
    return 0;
}

В данной программе по использованию функций вопросов возникать не должно. Функции сами по себе возвращают целочисленное значение, положительное – true, отрицательное или  ноль – false. В формировании результата работы функций участвовал тернарный оператор, то есть выводилось сообщение true или false без всяких числовых значений (см. Рисунок 5).

CppStudio.com
d - it is digit or alpha?: true
d - it is alpha?:          true
9 - it is digit?:          true
  - it is space?:          true
d - it is lower alpha?:    true
d - it is upper alpha?:    false
Для продолжения нажмите любую клавишу . . .

Рисунок 5 — Символы и строки

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

 
Практика

MVSocialButtons

Share this post

Отправить в FacebookОтправить в Google BookmarksОтправить в OdnoklassnikiОтправить в Vkcom

Авторизация

Новые пользователи

  • maribelhl18
  • acshvwtrs
  • JamesTon
  • Jeromegic
  • Miguelphamy

Статистика сайта

ОС
Linux r
PHP
5.6.30
MySQLi
5.7.21-20-beget-5.7.21-20-1-log
Время
19:57
Кэширование
Отключено
GZip
Отключено
Посетители
24657
Материалы
294
Количество просмотров материалов
309380
cassidy clay free pornmalay young girls sucking cockbeeg gallery hdchina young sexyoung inzestpornfree download sunny leon porn hd vedeos moviesxxx.biz Bangladeshi scandalfree daughter gangbangöld granny fikautumn riley porn video free download Bangladeshi scandalfree daughter gangbangöld granny fikautumn riley porn video free download mobile porn sexyoung inzestpornfree download sunny leon porn hd vedeos