无法在 LINUX 中的 C++ 中将 STRING 转换为 INT
Posted
技术标签:
【中文标题】无法在 LINUX 中的 C++ 中将 STRING 转换为 INT【英文标题】:Can't convert STRING to INT in C++ in LINUX 【发布时间】:2012-11-12 15:16:37 【问题描述】:我尝试了很多方法,详见此处:http://www.cplusplus.com/forum/general/13135/
如果我在 Windows 上运行文件,它们中的大多数都可以工作,但是当我尝试在 LINUX 上这样做时,它们都不起作用。 例如,我尝试这样做:
string str = "123";
int sp;
istringstream ( str ) >> sp;
但它给了我错误:“无效使用不完整类型‘struct std::istringstream’ /usr/include/c++/4.4/iosfwd:67: 错误:‘struct std::istringstream’的声明”
其他选项是“atoi”,但它表示“atoi 未在此范围内定义。”
任何想法为什么会发生?
【问题讨论】:
对于“atoi”#include <cstdlib>
。对于“istringstream”,#include <istream>
。您还应该添加using namespace std;
我不建议使用 atoi,它不符合 ANSI。 C++ 11 有 to_string 方法(参见en.cppreference.com/w/cpp/string/basic_string/to_string)。在较旧的 c++ 中,您可以尝试类似 fprintf.
@user1818446 想要从字符串转换为整数。不是相反;)
【参考方案1】:
至于 atoi() 函数,您需要包含 cstdlib (#include <cstdlib>
) 标头。
那么你可以这样使用它:
string str= "123";
int sp = atoi(str.c_str());
它会告诉字符串对象充当一个指向 C 风格字符串的 const char*(最有名的可能是带有零终止符 \0 的字符串)。
【讨论】:
【参考方案2】:将std::string
转换为int
的POSIX 方法将是atoi()
#include <cstdlib>
...
string str = "123";
int sp = atoi( str.c_str() );
如果您不仅要转换为int
,还要转换为多种类型,最好使用stringstream
。但是,请注意增加的编译时间。
【讨论】:
是的,它有效 - 我想我忘了添加 '#includeistringstream ( str ) >> sp;
也可以工作 - 请参阅上面的我的 cmets。很高兴你解决了:)!
@paulsm4: istringstring 的陷阱在于编译时间。以上是关于无法在 LINUX 中的 C++ 中将 STRING 转换为 INT的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 中将 boost-python 与 C++ 一起使用
无法在 C++ Win32 中将 URL 或 ID 设置为 SysLink