如何构建const std :: string&整数?

时间:2010-12-18 20:17:51

标签: c++

我有一个这样的变量:

const std::string& iterations = "30";

我想用它来确定“for”循环的迭代次数:

for ( int i = 0; i < iterations; i++ ) {
  // do something
}

怎么做?我知道我可以像这样投射到字符串:

iterations.c_str();

所以我尝试了c_int()但它不起作用:

iterations.c_int();

6 个答案:

答案 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)

你可以用这个:

int foo = atoi( iterators.c_str() );

有关atoi的说明,请参阅here

答案 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 );