将字符串转换为long

时间:2014-03-29 15:36:36

标签: c++ string

我试图将字符串转换为long。这听起来很容易,但我仍然得到同样的错误。我试过了:

include <iostream>
include <string>    

using namespace std;

int main()
{
  string myString = "";
  cin >> myString;
  long myLong = atol(myString);
}

但总是错误:

.../main.cpp:12: error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'long int atol(const char*)'

发生。 参考文献如下:

long int atol ( const char * str );

任何帮助?

4 个答案:

答案 0 :(得分:9)

尝试

long myLong = std::stol( myString );

该功能有三个参数

long stol(const string& str, size_t *idx = 0, int base = 10);

您可以使用第二个参数来确定字符串中解析数字的位置的位置。例如

std::string s( "123a" );

size_t n;

std::stol( s, &n );

std::cout << n << std::endl;

输出

3

该函数可以抛出异常。

答案 1 :(得分:8)

只需写长myLong = atol(myString.c_str());

答案 2 :(得分:2)

atol()需要 const char* ;从std::stringconst char*没有隐式转换,因此如果您真的想使用atol(),则必须调用 {{ 1}} 方法将原始的类C字符串指针传递给std::string::c_str()

atol()

更好的C ++方法是使用stol()(自C ++ 11以来可用),而不依赖于像// myString is a std::string long myLong = atol(myString.c_str()); 这样的C函数:

atol()

答案 3 :(得分:1)

atol作为参数获取const char*(C风格的字符串),但您将作为参数std::string传递。编译器无法在const char*std::string之间找到任何可行的转换,因此它会给您错误。您可以使用string成员函数std::string::c_str(),它返回一个c样式的字符串,相当于您std::string的内容。用法:

string str = "314159265";
cout << "C-ctyle string: " << str.c_str() << endl;
cout << "Converted to long: " << atol(str.c_str()) << endl;