将字符串转换为size_t

时间:2015-12-02 13:25:19

标签: c++ string c++11 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

6 个答案:

答案 0 :(得分:9)

您可能希望sscanf使用%zu说明符,std::size_t

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

看看here

从字面上看,我怀疑operator >> std::basic_istringstream的{​​{1}}超载std::size_t。请参阅here

答案 1 :(得分:7)

您可以使用std::stringstream

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

答案 2 :(得分:6)

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

或者使用会std::stringstream重载>>的{​​{1}}。

答案 3 :(得分:4)

让我们假设一分钟size_t现有整数的typedef,即与unsigned intunsigned long或{的宽度相同{1}}。

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

使用unsigned long long不是大于而不是size_t的假设,stoullstrtoull随后转换为{{1}应该工作。

根据相同的假设(unsigned long long定义size_tsize_t),成为unsigned long重载类型。

答案 4 :(得分:1)

#include <sstream>

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

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

答案 5 :(得分:0)

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