При разработке приложения, использующего множество типов, возникает необходимость преобразования одного типа в другой. Мы уже показывали вам несколько основных преобразований типов в наших предыдущих статьях.
Мы также показали преобразование строк и преобразование числовых типов в строки. Помимо функций преобразования строк, есть несколько функций, которые используются для преобразования символа в другие типы данных.
Это функции, которые принимают один символ или массив символов, а затем преобразуют их в другие типы данных.
Функции преобразования символов
Когда дело доходит до преобразования одного символа в целое число или строку и преобразования массива символов в строку, функции преобразования немного отличаются от функций преобразования строк.
В этой статье мы обсудим следующие преобразования:
- Преобразование символа в целое число (char в int C++)
- Преобразование символа в строку (char в строку C++)
- Преобразование массива символов в строку
Первые два преобразования имеют дело с одним символом, а последнее преобразование включает в себя массив символов.
Преобразование символа в целое — char в int
Чтобы преобразовать один символ в целочисленный тип, у нас есть два метода, как указано ниже:
1) По кастингу
Мы можем использовать операцию приведения для преобразования одного символа в его целочисленный эквивалент. В этом случае будет отображаться ASCII-эквивалент символа.
Рассмотрим следующее преобразование:
char a = ‘A’; int num = (int) a; |
В этом случае ‘num’ будет иметь значение 65, которое является эквивалентом ASCII символа ‘A’.
В качестве альтернативы мы можем использовать следующую операцию, если хотим преобразовать числовой символ в целочисленное значение:
char a = ‘2’; int num = a-48; |
48 — это значение ASCII, равное 0. Вторая строка a-48 преобразует char a в его эквивалент ASCII, а затем вычитает его из 48 (50-48), что приводит к целочисленному значению 2.
2) Использование строкового потока
Как уже было показано в статье по функциям преобразования строк, мы можем преобразовать один символ, представленный в виде объекта stringstream, в целое число или любое числовое значение.
Ниже приведен код, демонстрирующий это:
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { stringstream str; str << "5"; int x; str >> x; cout<<"Converted value of character 5 :"<<x; } |
Вывод данных:
Converted value of character 5 :5 |
Преобразование символа в строку
Существуют различные способы, с помощью которых мы можем преобразовать один символ в строку.
Давайте обсудим некоторые из этих методов.
1) Использование конструктора, предоставленного классом String
Прототип функции: string s(int n, char x);;
Параметры:
n=> Размер генерируемой строки.
x=> Символ, который нужно преобразовать в строку.
Возвращаемое значение: строка, полученная преобразованием символа.
Описание: Конструктор класса string принимает длину строки (n) и один символ в качестве параметров, а затем преобразует символ в строку.
Ниже приведен простой пример, демонстрирующий преобразование одного символа в строку:
1 2 3 4 5 6 7 8 9 10 |
#include<iostream> #include <string> using namespace std; int main() { string str(1,'A'); cout<<"The string obtained by converting single character : "<<str; return 0; } |
Вывод данных:
The string obtained by converting single character: A |
Приведенное выше преобразование является простым. Мы вызываем конструктор строки и указываем длину строки (первый параметр) как 1, поскольку мы преобразуем один символ, а второй параметр — это символ, который нужно преобразовать в строку (в данном случае «A»).
2) Использование оператора std::string = и +=
Мы можем использовать эти операторы для преобразования одного символа в строку.
Это демонстрируется в программе, показанной ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include<iostream> #include <string> using namespace std; int main() { string str; char c = 'B'; str = 'C'; str += c; cout<<"The string obtained by converting single character : "<<str; return 0; } |
Вывод данных:
The string obtained by converting single character : CB |
В этой программе мы использовали оба перегруженных оператора = и +=. Мы объявили строковый объект, а затем присвоили ему символ с помощью оператора =. Затем мы используем оператор += и назначаем другой символ строковому объекту.
Мы видим, что во второй раз символ фактически объединяется с уже существующим содержимым в строковом объекте.
3) Использование различных методов std::string
Класс std::string поддерживает различные перегруженные методы, с помощью которых мы можем передать символ в строку, которая в конечном итоге преобразует символ в строку.
Некоторые из методов класса std::string:
- push_back
Прототип функции: void push_back (char c)
Параметры: c=> Символ, назначаемый строке
Возвращаемое значение: возвращает void
Описание: Эта функция перегружена для работы с символами и присваивает символ в конец строки.
- append
Прототип функции: string& append (size_t n, char c)
Параметры:
n=> Количество раз, когда символ должен быть добавлен.
c=> Символ, который должен быть добавлен к строке.
Возвращаемое значение: строка, полученная преобразованием символа.
Описание: Функция добавления std::string принимает два аргумента. Первый аргумент — это количество раз, которое символ должен быть скопирован в строку. Второй аргумент — это фактически копируемый символ. Таким образом, функция добавления присвоит строке столько копий символа, сколько указано в первом аргументе.
- assign
Прототип функции: string& assign (size_t n, char c);
Параметры:
n=> Количество копий символа.
c=> Символ, который нужно скопировать в строку.
Возвращаемое значение: строка, полученная преобразованием символа.
Описание: Функция Assign заменяет содержимое текущей строки n (первый аргумент) копиями символа (второй аргумент).
- insert
Прототип функции: string& insert (size_t pos, size_t n, char c);
Параметры:
pos=> Позиция, в начале которой должны быть вставлены символы.
n=> Количество копий персонажа.
c=> Символ, который нужно вставить в строку.
Возвращаемое значение: строка, полученная преобразованием символа.
Описание: Эта функция вставляет n (второй аргумент) копий символа (третий аргумент) в начальную позицию строки, указанной pos (первый аргумент).
Далее мы разработаем программу, которая демонстрирует все вышеперечисленные функции класса std::string:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include<iostream> #include <string> using namespace std; int main() { string str; str.push_back('A'); cout<<"push_back single character : "<<str<<endl; str=""; str.append(1,'C'); cout<<"append single character : "<<str<<endl; str=""; str.assign(1,'D'); cout<<"assign single character : "<<str<<endl; str.insert(0,1,'B'); cout<<"insert single character : "<<str<<endl; return 0; } |
Вывод данных:
push_back single character: A append single character: C assign single character : D insert single character: BD |
Вышеприведенная программа демонстрирует функции push_back, append, assign и insert. Вывод показывает результат или строку, возвращаемую каждой функцией.
4) Использование std::stringstream
Мы уже обсуждали преобразование числовых типов в строку с помощью stringstream. Преобразование символа в строку также следует тому же принципу, когда используется класс stringstream.
Данный символ вставляется в поток, а затем содержимое записывается в строку.
Давайте проясним это, используя программу на C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include<iostream> #include <string> #include <sstream> using namespace std; int main() { string str; stringstream mystr; mystr<<'A'; mystr>>str; cout<<"The string obtained by converting single character : "<<str; return 0; } |
Вывод данных:
The string obtained by converting a single character: A |
Сначала мы вставляем символ в объект потока, а затем этот буфер записывается в объект строки. Таким образом, вывод программы показывает содержимое строкового объекта, который является одним символом.
Преобразование массива символов в строку
Класс std::string имеет множество методов, которые могут пригодиться при работе с символьными массивами. Следовательно, рекомендуется преобразовывать массивы символов в строковые объекты, а затем использовать их, чтобы мы могли писать эффективные программы.
Существует два метода преобразования массива символов в строку, как показано ниже:
1) Использование конструктора строк
Как уже обсуждалось для преобразования одного символа в строку, мы можем использовать конструктор строк для преобразования массива символов в строку.
Прототип функции: string (const char* s);
Параметры: s=> массив символов с завершающим нулем для преобразования в строку
Возвращаемое значение: string=> преобразованная строка
Описание: Этот перегруженный конструктор класса std::string принимает массив символов или C-строку в качестве аргумента и возвращает строку.
Следующая программа демонстрирует это преобразование:
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <string> using namespace std; int main() { char myarray[] = {"Monitor Bank Ru"}; string mystr(myarray); cout<<"Converted string: "<<mystr; } |
Вывод данных:
Converted string: Monitor Bank Ru |
Вышеупомянутая программа довольно проста. Все, что требуется, — это всего один вызов конструктора std::string для преобразования заданного массива символов в строку.
2) Использование =
Другой подход к преобразованию массива символов в строковый объект заключается в использовании перегруженного оператора =. Здесь мы можем напрямую присвоить массив символов строковому объекту, используя оператор =, и содержимое будет передано в строку.
Следующий пример показывает это:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> #include <string> using namespace std; int main() { char myarray[] = {"Monitor Bank Ru"}; string mystr; mystr = myarray; cout<<"Converted string: "<<mystr; } |
Вывод данных:
Converted string: Monitor Bank Ru |
Вышеприведенная программа присваивает массив непосредственно строковому объекту, используя оператор =, что приводит к копированию содержимого массива символов в строковый объект.
Итог
Мы показали вам различные методы для преобразования одного символа, а также массивов символов в строковые объекты. Так как класс std::string имеет множество функций, позволяющих нам эффективно манипулировать строками, всегда полезно работать с символьными данными, предварительно преобразовав их в строки.
Мы также можем использовать методы класса для преобразования символьных данных в строки. При этом мы сначала вставляем данные в поток, а затем записываем этот буфер в строковый объект.
В нашей следующей статье мы подробно обсудим класс stringstream и его применение в C++.
С Уважением, МониторБанк