преобразовать строку в размер t
есть ли способ, чтобы преобразовать std::string
to size_t
?
Проблема в том, что size_t
тип платформы зависящий (пока он результат sizeof
). Итак, я не могу гарантировать, что преобразование string
to unsigned long
или unsigned int
сделает это правильно.
изменить: Простой случай:
std::cout<< "Enter the index:";
std::string input;
std::cin >> input;
size_t index=string_to_size_t(input);
//Work with index to do something
5 ответов
можно использовать %zd
Как спецификатор формата в scanf
-тип подхода.
или использовать std::stringstream
что будет перегружен >>
to size_t
.
можно использовать std::stringstream
std::string string = "12345";
std::stringstream sstream(string);
size_t result;
sstream >> result;
std::cout << result << std::endl;
предположим на минуту, что size_t
является typedef для существующей целое число, т. е. такая же ширина, как и unsigned int
, unsigned long
или unsigned long long
.
AFAIR it мог бы быть отдельным (еще большим) типом, насколько это касается стандартной формулировки, но я считаю это маловероятным.
работа с этим предположением, что size_t
не больше чем unsigned long long
, либо stoull или strtoull с последующим приведением к size_t
должны работать.
из того же предположения (size_t
определяется как unsigned long
или unsigned long long
), есть б быть operator>>
перегрузка для этого типа.
#include <sstream>
std::istringstream iss("a");
size_t size;
iss >> size;
С помощью iss.fail (), вы проверяете сбой. Вместо ("a") используйте значение, которое вы хотите преобразовать.