преобразовать строку в размер 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.


вы можете использовать sscanf С %zu спецификатор, который предназначен для std::size_t.

sscanf(input.c_str(), "%zu", &index);

посмотреть здесь.

буквально, я сомневаюсь, что есть перегруженный operator >> of std::basic_istringstream на std::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") используйте значение, которое вы хотите преобразовать.