将字符串转换为 size_t
convert string to size_t
有没有办法把std::string
转换成size_t
?
问题是 size_t
是平台依赖类型(而它是 sizeof
的结果)。所以,我不能保证将 string
转换为 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
您可能希望将 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 int
、unsigned long
, 或 unsigned long long
.
AFAIR 就标准措辞而言,它 可能 是一个单独的(更大的)类型,但我认为这不太可能。
假设 size_t
不 大于 unsigned long long
,或者 stoull or strtoull 随后转换为 size_t
应该可以。
根据相同的假设(size_t
根据 unsigned long
或 unsigned 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;
}
}
有没有办法把std::string
转换成size_t
?
问题是 size_t
是平台依赖类型(而它是 sizeof
的结果)。所以,我不能保证将 string
转换为 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
您可能希望将 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 int
、unsigned long
, 或 unsigned long long
.
AFAIR 就标准措辞而言,它 可能 是一个单独的(更大的)类型,但我认为这不太可能。
假设 size_t
不 大于 unsigned long long
,或者 stoull or strtoull 随后转换为 size_t
应该可以。
根据相同的假设(size_t
根据 unsigned long
或 unsigned 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;
}
}