将字符串转换为 size_t

convert string to size_t

有没有办法把std::string转换成size_t? 问题是 size_t 是平台依赖类型(而它是 sizeof 的结果)。所以,我不能保证将 string 转换为 unsigned longunsigned 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

您可能希望将 sscanf%zu 说明符一起使用,该说明符用于 std::size_t

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

看看here.

从字面上看,我怀疑 std::size_t 是否存在 std::basic_istringstream 的重载 operator >>。参见 here

您可以使用 %zd 作为 scanf 类型方法中的格式说明符。

或使用 std::stringstream,它会将 >> 重载到 size_t

你可以使用std::stringstream

std::string string = "12345";
std::stringstream sstream(string);
size_t result;
sstream >> result;
std::cout << result << std::endl;
#include <sstream>

std::istringstream iss("a");
size_t size;
iss >> size;

通过使用 iss.fail(),您可以检查失败。 使用您要转换的值而不是 ("a")。

让我们暂时假设 size_t 现有 整数的类型定义,即与 unsigned intunsigned long, 或 unsigned long long.

AFAIR 就标准措辞而言,它 可能 是一个单独的(更大的)类型,但我认为这不太可能。

假设 size_t 大于 unsigned long long,或者 stoull or strtoull 随后转换为 size_t应该可以。


根据相同的假设(size_t 根据 unsigned longunsigned long long 定义),operator>> 该类型的重载。

/**
   * @brief  Convert const char* to size_t
   * @note   When there is an error it returns the maximum of size_t
   * @param  *number: const char* 
   * @retval size_t
   */
  size_t to_size_t(const char *number) {
    size_t sizeT;
    std::istringstream iss(number);
    iss >> sizeT;
    if (iss.fail()) {
      return std::numeric_limits<size_t>::max();
    } else {
      return sizeT;
    }
  }