无法在 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。但是,请注意增加的编译时间。

【讨论】:

是的,它有效 - 我想我忘了添加 '#include ' istringstream ( str ) &gt;&gt; sp; 也可以工作 - 请参阅上面的我的 cmets。很高兴你解决了:)! @paulsm4: istringstring 的陷阱在于编译时间。

以上是关于无法在 LINUX 中的 C++ 中将 STRING 转换为 INT的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 在 Linux 中将文件移动到垃圾箱

在 Linux 中将 boost-python 与 C++ 一起使用

无法在 C++ Win32 中将 URL 或 ID 设置为 SysLink

无法将文本附加到 C++ 中的特定位置

无法在 Visual Studio 中将 Visual C++ 运行时包引用添加到 Windows Phone 项目

C++ linux套接字,在一次调用中将字符串数组(char**)作为连接字符串发送