Преобразование типов в с++. Из int в string
Каким способами можно выполнить преобразование из инта в строку? На сайте http://ru.cppreference.com пишут про to_string, но у меня компилятор выдает ошибку «‘to_string’ was not declared in this scope». Хотя заголовок string подключен, а так же включен с+11. Компилятор: MinGW
#include #include #include #include using namespace std; int main() < int n; cin >> n; multiset a; multiset forCheck; vector ans; for(int i = 0; i < n; ++i)< int x; cin >> x; a.insert(x); > for(int i = 0; i < n; ++i) < if(forCheck.empty()) < forCheck.insert(*a.begin()); a.erase(*a.begin()); continue; >if(*forCheck.begin() < *a.begin()) < forCheck.insert(*a.begin()); a.erase(*a.begin()); >else < forCheck.clear(); >if(forCheck.size() == 3) < string s = ""; for(int i: forCheck) s += to_string(i); // тут! ans.push_back(s); forCheck.clear(); >> for(string str: ans) < cout return 0; >

Отслеживать
222k 15 15 золотых знаков 120 120 серебряных знаков 234 234 бронзовых знака
задан 4 июл 2017 в 15:37
Andrey Varfolomeev Andrey Varfolomeev
183 1 1 золотой знак 2 2 серебряных знака 14 14 бронзовых знаков
Как привести int к string c
Нередко может возникнуть необходимость объединить строку с данными других типов, например, числами. Однако объединить строку мы можем только с другой строкой. Поэтому данные других типов вначале необходимо преобразовать в строку. Для преобразования в строку применяется функция std:to_string() , в которую передается преобразуемое значение:
#include #include int main() < unsigned age; std::string message< "Age: " + std::to_string(age)>; std::cout
Функции преобразования из строки в число
Нередко может вощникнуть противиположная задача — преобразовать строку в другой тип. Есть ряд функций, которые преобразуют строку в число определенного типа:
- stoi() : преобразует в тип int
- stol() : в long
- stoll() : в long long
- stoul() : в unsigned long
- stoull() : в unsigned long long
- stof() : в float
- stod() : в double
- stold() : в long double
Все они определены в модуле , работают однотипно и в качестве параметра принимают преобразуемую строку:
std::string str< "123" >; int n< std::stoi(str) >; // n == 123
Преобразование строки в указатель на символы
При необходимости можно преобразовать значение типа string в указатель на символы. Для преобразования в указатель на константную строку применяется метод c_str() :
#include #include int main() < std::string message ; const char* message_ptr = message.c_str(); // преобразуем в указатель std::cout
Для получения указателя также можно применять метод data() , который возвращает указатель на неконстантное значение, если объект string не является константой.
#include #include int main() < std::string message ; char* message_ptr = message.data(); // преобразуем в указатель std::cout
Как привести тип int к строке в C++
В C++ существует несколько способов приведения целочисленного типа int к строке. В данной статье мы рассмотрим несколько примеров, демонстрирующих различные подходы к решению этой задачи.
Использование функции to_string()
В C++11 и новее, можно использовать функцию to_string() для приведения типа int к строке. Эта функция принимает целочисленное значение и возвращает соответствующую строку.
#include #include int main()
В данном примере переменная num типа int приводится к строке при помощи функции to_string(). Результат сохраняется в переменной str типа std::string. Затем, результат выводится на экран с помощью std::cout.
Использование потоковых операторов
Другой способ приведения типа int к строке — использование потоковых операторов. Мы можем записать значение int в строковый поток std::ostringstream, а затем получить строку из этого потока.
#include #include int main()
В данном примере переменная num типа int записывается в строковый поток oss при помощи потокового оператора из библиотеки Boost используется для приведения типа int к строке. Результат сохраняется в переменной str типа std::string.
Заключение
В данной статье мы рассмотрели несколько способов приведения типа int к строке в C++. Каждый из способов имеет свои преимущества и может быть полезен в различных ситуациях. Вы можете выбрать тот способ, который наиболее удобен для ваших нужд.
Преобразование переменной типа String в переменную типа int
Почему, чтобы присвоить переменную типа String переменной типа int , нужно String преобразовать в int ? У String больше диапазон допустимых значений, чем у int ? Я понимаю, что int — это целочисленный тип данных, и что я не смогу слово «Привет» присвоить переменной int . Но тут же, по сути, я хочу целое число присвоить.
String stringGuess = "2"; int intGuess = Integer.parseInt(stringGuess);
Отслеживать
51.6k 204 204 золотых знака 67 67 серебряных знаков 251 251 бронзовый знак
задан 26 авг 2018 в 9:19
Vladislove Vladislove
492 1 1 золотой знак 5 5 серебряных знаков 21 21 бронзовый знак
Добро пожаловать в мир статической типизации, в котором каждая переменная имеет конкретный тип, известный на этапе компиляции, и компилятор не позволяет присвоить ей значения другого типа.
26 авг 2018 в 9:25
@SergeyGornostaev а у String есть определенный диапазон значений, как у примитивов ? К примеру явные и неявные преобразования. Или со String все работает по другому ?
26 авг 2018 в 9:30
@Влад String это не число, посему ограничения для String память устройства. Все работает иначе, да. Советую изучить примитивы и строки.
26 авг 2018 в 9:44
Код в вопросе размещайте форматированным текстом, а не скриншотами, пожалуйста.
26 авг 2018 в 10:07
String не может быть int примерно по той же причине, почему написанное ручкой на туалетной бумажке «100 баксов» не могут быть реальными сотней долларов. Ведь вас не удивляет, что никто не принимает к оплате надпись на бумажке, а написанные символами цифры вы готовы принять за реальное число. String это текстовый тип и туда вы можете присвоить не число 2, а символ «2»
26 авг 2018 в 10:10
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Всё очень просто, так как int это примитивный тип, а вот String это по сути класс обертка над массивом char .
Если посмотреть исходный код класса String все станет понятнее.
public final class String . < //Это и есть наш массив, в котором храниться последовательность строк private final char[] value; >
Конечно можно сказать что один char без проблем войдет в один int , но для этого нам необходимо выбрать какой именно символ из массива мы хотим складировать в нашем примитиве int . К тому же когда ты присваиваешь строку «2» в int непонятно что ты хочешь. Получить ее номер в таблице Unicod , распарсить её значение, а может вообще получить её длину. Поэтому и нельзя сделать автоматический «анбоксинг» как в случае с int и Integer . Нет однозначности, а компилятор не может прочитать твои мысли.
Отслеживать
ответ дан 26 авг 2018 в 21:11
316 2 2 серебряных знака 19 19 бронзовых знаков
Потому что Java это статически типизированный язык. У этого есть свои преимущества:
- Статическая типизация даёт самый простой машинный код. Поэтому она удобна для языков, дающих исполняемые файлы ОС или JIT-компилируемые промежуточные коды.
- Многие ошибки исключаются уже на стадии компиляции.
- Поэтому статическая типизация хороша для написания сложного, но быстрого кода.
- В интегрированной среде разработки осуществимо более релевантное автодополнение, особенно если типизация — сильная статическая: множество вариантов можно отбросить как не подходящие по типу.
Это все из-за выделения памяти под ваши переменные(и не только).
Каждая переменная в Java имеет конкретный тип, который определяет размер и размещение её в памяти; диапазон значений, которые могут храниться в памяти; и набор операций, которые могут быть применены к переменной.
В Java есть примитивные типы( int , byte , long , и т.п.), а есть и ссылочные — например, String . И если при операциях с примитивными типами вы можете их приводить неявно, ( long x = int y ), но они все равно приводятся, то при операциях с примитивными и ссылочными типами( int i = String s ) вам придется приводить их явно(например, парсить).