Оригінальна публікація: String to Int in C++ – How to Convert a String to an Integer Example
При кодуванні в C++ часто потрібно перетворити один тип даних на інший.
У цій публікації ви дізнаєтеся, як перетворити рядок на ціле число в C++, переглянувши два найпопулярніші способи.
Розпочнімо!
Типи даних в С++
Мова програмування C++ має декілька вбудованих типів даних:
int
для цілих чисел (наприклад, 10, 150)double
для чисел з рухомою комою (наприклад, 5.0, 4.5)char
для окремих символів (наприклад, 'D', '!')string
для послідовності символів (наприклад, "Привіт")bool
для логічних значень (true або false)
C++ — строго типізована мова програмування. Це означає, що коли ви створюєте змінну, ви повинні явно оголосити, який тип значення буде зберігатися в ній.
Як оголосити та ініціалізувати int
в C++
Щоб оголосити змінну int
в C++, спочатку потрібно написати тип даних змінної: у цьому разі int
. Це дозволить компілятору знати, які значення може зберігати змінна і, відповідно, які дії може виконувати.
Далі вам потрібно надати змінній назву.
Не забудьте поставити крапку з комою, щоб закінчити інструкцію!
#include <iostream>
int main() {
int age;
}
Потім ви можете надати створеній змінній значення, наприклад:
#include <iostream>
int main() {
int age;
age = 28;
}
Замість того, щоб виконувати ці дії як окремі кроки, ви можете поєднати їх, ініціалізувавши змінну та надрукувавши результат:
// файл заголовка, який дозволяє використовувати функції для виведення інформації, напр. cout, або введення інформації, напр. cin
#include <iostream>
// інструкція namespace; вам не доведеться використовувати префікс std::
using namespace std;
int main() { // початок основної функції програми
int age = 28;
// ініціалізуйте змінну.
//Ініціалізація — це надання типу, назви та значення змінної за один раз.
// вивід на консоль: "My age is 28", з використанням ланцюжка <<
cout << "My age: " << age << endl;
}// кінець основної функції
Як оголосити та ініціалізувати string
в C++
Рядки — це набір окремих символів.
Оголошення рядків в C++ дуже подібне до оголошення та ініціалізації int
, що ви бачили в розділі вище.
Стандартна бібліотека C++ надає клас string
. Щоб використати рядковий тип даних, потрібно включити бібліотеку заголовків <string>
у верхній частині вашого файлу після #include <iostream>
.
Після включення цього файлу заголовка ви також можете додати using namespace std;
, що ви бачили раніше.
Крім того, після додавання цього рядка вам не потрібно буде використовувати std::string
під час створення рядкової змінної — тільки string
.
#include <iostream>
#include <string>
using namespace std;
int main() {
//оголосіть рядкову змінну
string greeting;
greeting = "Hello";
//оператор присвоєння `=` присвоює значення змінній
}
Або ви можете ініціалізувати рядкову змінну та вивести її на консоль:
#include <iostream>
#include <string>
using namespace std;
int main() {
//ініціалізуйте рядкову змінну
string greeting = "Hello";
//виведення "Hello" на консоль
cout << greeting << endl;
}
Як конвертувати рядок в ціле число
Як згадувалося раніше, C++ є строго типізованою мовою.
Якщо ви спробуєте надати значення, яке не відповідає типу даних, ви отримаєте помилку.
Крім того, конвертувати рядок в ціле число не так просто, як використати приведення типів, яке можна використовувати під час конвертації double
в int
.
Наприклад, ви не можете зробити так:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "7";
int num;
num = (int) str;
}
Помилка після компілятора:
hellp.cpp:9:10: error: no matching conversion for C-style cast from 'std::__1::string' (aka
'basic_string<char, char_traits<char>, allocator<char> >') to 'int'
num = (int) str;
^~~~~~~~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/string:875:5: note: candidate function
operator __self_view() const _NOEXCEPT { return __self_view(data(), size()); }
^
1 error generated.
Існує декілька способів перетворити рядок в ціле число. В наступних розділах розглянемо два з них.
Як перетворити рядок в число за допомогою функції stoi()
Одним з ефективних способів перетворити рядковий об’єкт в число — це використати функцію stoi()
.
Цей метод зазвичай використовується для новіших версій C++, і вводиться в C++11.
Вона приймає рядкове значення як ввід та повертає ціле число як вивід.
#include <iostream>
#include <string>
using namespace std;
int main() {
// рядкова змінна з іменем str
string str = "7";
// видрукування на консолі
cout << "I am a string " << str << endl;
//конвертуйте рядкову змінну str так, щоб вона мала значення int
//помістіть нове значення в нову змінну, яка тримає значення int, під назвою num
int num = stoi(str);
//видрукування на консолі
cout << "I am an int " << num << endl;
}
Вивід:
I am a string 7
I am an int 7
Як перетворити рядок в число за допомогою класу stringstream
Клас stringstream
в основному використовують в попередніх версіях C++. Він працює, виконуючи ввід та вивід на рядках.
Щоб використати його, потрібно включити бібліотеку sstream
у верхній частині вашої програми, додавши рядок #include <sstream>
.
Потім додайте stringstream
та створіть об’єкт stringstream
, який буде тримати значення рядка, який ви хочете конвертувати в число, і який використовуватиметься під час процесу конвертування.
Використайте оператор <<
, щоб витягти рядок із рядкової змінної.
Використайте оператор >>
для введення щойно конвертованого значення в змінну.
#include <iostream>
#include <string>
#include <sstream> // це дозволить вам використовувати stringstream у своїй програмі
using namespace std;
int main() {
//створіть об’єкт stringstream для вводу/виводу рядків
stringstream сс;
// змінна з назвою str, яка має рядковий тип даних
string str = "7";
// змінна з назвою num, яка має тип даних int
int num;
//вилучіть рядок зі змінної str (введіть рядок у потік)
сс << str;
// помістіть конвертоване значення в змінну int
сс >> num;
//видрукування на консолі
cout << num << endl; // друкує ціле число 7
}
Висновок
Ось так! Ви побачили два простих способи перетворення рядка в ціле число в C++.
Дякую, що прочитали. Щасливого навчання 😊