将字符串转换为size_t

convert string to size_t

本文关键字:size 字符串 转换      更新时间:2023-10-16

有没有办法将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

您可以使用std::stringstream

std::string string = "12345";
std::stringstream sstream(string);
size_t result;
sstream >> result;
std::cout << result << std::endl;
您可能

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

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

看看这里。

从字面上看,我怀疑std::size_t是否有超载的std::basic_istringstream operator >>.看这里。

让我们假设size_t现有整数的 typedef,即与 unsigned intunsigned longunsigned long long 的宽度相同。

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

假设size_t大于unsigned long long,无论是斯托尔还是斯特图尔,随后的投射到size_t都应该有效。


根据相同的假设(size_tunsigned longunsigned long long来定义(,该类型将存在operator>>重载。

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

或者使用具有过载>> std::stringstreamsize_t

#include <sstream>
std::istringstream iss("a");
size_t size;
iss >> size;

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

/**
   * @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;
    }
  }