Оригінальна публікація: 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++.

Дякую, що прочитали. Щасливого навчання 😊