我有一个这样的变量:
const std::string& iterations = "30";
我想用它来确定“for”循环的迭代次数:
for ( int i = 0; i < iterations; i++ ) {
// do something
}
怎么做?我知道我可以像这样投射到字符串:
iterations.c_str();
所以我尝试了c_int()但它不起作用:
iterations.c_int();
答案 0 :(得分:8)
按优先顺序排列:
boost::lexical_cast
atoi
std::stringstream
sscanf
请注意,lexical_cast
非常简单,可以写在这里:
#include <exception>
#include <sstream>
struct bad_lexical_cast : std::exception {};
template<typename Target, typename Source>
Target lexical_cast(Source arg)
{
std::stringstream interpreter;
Target result;
if(!(interpreter << arg) ||
!(interpreter >> result) ||
!(interpreter >> std::ws).eof())
throw bad_lexical_cast();
return result;
}
它将任何东西都转化为任何东西。 (学分:http://www.gotw.ca/publications/mill19.htm)
用法:int iter = lexical_cast<int>(iterations)
答案 1 :(得分:2)
答案 2 :(得分:1)
int iters = atoi(str.c_str());
您还可以使用字符串流
来使用更现代的C ++样式方法string s = "1234";
stringstream ss(s);
int i;
ss >> i;
答案 3 :(得分:1)
你只需要使用简单的函数 - atoi(iterations.c_str());
答案 4 :(得分:1)
这样做:
istringstream ss(iterators);
int count;
ss >> count;
for ( int i = 0; i < count; i++ ) {
// do something
}
答案 5 :(得分:1)
您可以使用以下函数将字符串转换为数字:
#include <sstream>
#include <string>
#include <ios>
template<class T>
bool str2num( const std::string& s, T *pNumber,
std::ios_base::fmtflags fmtfl = std::ios_base::dec )
{
std::istringstream stm( s.c_str() );
stm.flags( fmtfl );
stm >> (*pNumber);
return stm.fail() == false;
}
对于转换为整数调用,如下所示:
int output;
bool success = str2num( iterations, &output );