C ++字符串到整数问题使用atoi(str.c_str())

时间:2014-03-21 13:46:40

标签: c++ arrays string integer atoi

我试图将字符串形式的变量表示为整数,我已经这样做了;

atoi(str.c_str()) 

该字符串最初是从文本文件中获取并存储在;

CharArrayPtr cmemblock;

然后将其表示为字符串;

    string str;

    for(int i = 0; i < numberofvalues; i++)
    {   
        str = cmemblock[i];
        int number = atoi(str.c_str());
        cout << number;


    }

如果我要将'cout'更改为print str;

str = cmemblock[i];
int number = atoi(str.c_str());
cout << str;

数字显示正确,存储在文本文件中

但是,我要求输出为整数,以便我可以在循环中表示它以搜索存储在数组中的值。所以这就是'数字'发挥作用的地方,这就是为什么我要求你帮助的原因;

cout << number;

每当读取新行时,它表示为“0”我将如何删除它?如果你需要我的完整代码,它有几个不同的.cpp文件,并且为了防止任何人复制我的工作,我只能通过电子邮件发送给你,我相信你已经猜到它是大学作业的一部分。

使用Adosi会员代码,我提出了这个问题;

         std::string str;

    for(int i = 0; i < numberofvalues; i++)
    {   

        str = cmemblock[i];
        std::stol(str);
        int number = std::stoi(str);
        cout << number;


    }

我收到错误R6010。我做错了吗?

3 个答案:

答案 0 :(得分:2)

std::stoi(str)

使用此代替atoi

C ++ 11有这个和其他一些函数,例如std::stol()用于longs,std::stof()用于浮点数等。

http://en.cppreference.com/w/cpp/string/basic_string/stol

答案 1 :(得分:0)

如果您C++11没有std::stoiboost #include <boost/lexical_cast.hpp> int main() { std::string s = "100"; try { int n = boost::lexical_cast<int>(s); std::cout << "n = " << n << std::endl; } catch (boost::bad_lexical_cast) { std::cout << "conversion failed" << std::endl; } } ,则可以使用lexical cast

std::string str;

for(int i = 0; i < numberofvalues; i++)
{   

    str = cmemblock[i];
    //std::stol(str); -> This line is unneeded as it converts string to a long
    // Ideally you should check that str is valid here etc. before changing it to an int
    int number = std::stoi(str);
    cout << number;


}

这确保了可以进行有效转换,如果不能

则抛出异常

关于您的编辑 - 这需要C ++ 11编译器才能工作

{{1}}

答案 2 :(得分:0)

另一种选择是使用std::stringstream

 #include <sstream>
 #include <string>

 int string_to_int(const std::string &string) {
     std::stringstream s(string);
     s >> number;
     if (!s.good()) {
         throw std::exception();
     }
     return s;
 }

 int main(int argc, const char* argv[]) {
     int number = string_to_int(argv[1]);
     return 0;
 }

这不需要任何外部库或C ++ 11,并且应该与任何C ++编译器兼容。

修改

充实示例,说明如何编写自己的string_to_int函数以简化std::stringstream的使用。