将字符串转换为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
您可以使用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 int
、unsigned long
或 unsigned long long
的宽度相同。
AFAIR 就标准措辞而言,它可能是一个单独的(更大的(类型,但我认为这不太可能。
假设size_t
不大于unsigned long long
,无论是斯托尔还是斯特图尔,随后的投射到size_t
都应该有效。
根据相同的假设(size_t
用unsigned long
或unsigned long long
来定义(,该类型将存在operator>>
重载。
在scanf
类型方法中,可以使用%zd
作为格式说明符。
或者使用具有过载>>
std::stringstream
来size_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;
}
}