繁体   English   中英

将字符串转换为long

[英]Converting string to long

我正在尝试将字符串转换为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 );

有帮助吗?

尝试

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

该函数可以抛出异常。

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

atol()需要一个const char* ; 没有从std::stringconst char*隐式转换,所以如果你真的想使用atol() ,你必须调用std::string::c_str()方法来获得原始的类C字符串指针传递给atol()

// myString is a std::string
long myLong = atol(myString.c_str());

更好的C ++方法是使用stol() (自C ++ 11以来可用),而不依赖于像atol()这样的C函数:

long myLong = std::stol(myString);

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM