C ++:无法将字符串转换为int

时间:2017-02-10 07:59:21

标签: c++ string vector int type-conversion

我正在尝试将两个字符的字符串转换为整数,但我得到了

error: invalid cast from type 'std::basic_string<char>' to type 'int'

我跑的时候。这是代码。

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

class Instruction
{
private:
    vector<string> Inst;

public: 
    void readFile(string infile)
    {
        ifstream myfile (infile);
        if (myfile.is_open())
        {
            while (getline(myfile, line))
            {
                Inst.push_back(line);
            }
            myfile.close();
        }
        else
            cout << "Unable to open file." << endl;
    }

void runProcess()
    {
        for (int i=0; i<Inst.size(); i++)
        {
            op_code = getOperation(Inst[i]);

我将跳过runProcess的其余部分,因为它不重要。在它下面,我有

    int getOperation(string inst)
    {
        return (int)inst.substr(2);
    }

这是我遇到麻烦的地方。我试过(int),stoi和atoi。没有任何效果。

我对C ++很新,所以尝试从向量中传入字符串很可能是一个问题,但我不确定。如果我需要发布任何其他内容,请告诉我。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果std::stoi不可用,建议使用strtol

查看此问答答详情:basics of strtol

不久:

const char *s = input.c_str();
char *t;
long l = strtol(s, &t, 10);
if(s == t) {
   /* strtol failed */
}

答案 1 :(得分:0)

试一试

#include <iostream>
#include <vector>
#include <sstream>

int main(int argc, const char * argv[]) {

    std::vector<std::string> Inst;
    std::string line = "59";
    Inst.push_back(line);

    std::stringstream ss;
    int op_code;
    ss << Inst[0];
    ss >> op_code;
    std::cout << "op_code = " << op_code << std::endl;
    return 0;
}

对我来说效果很好。

但是如果你说你的字符串包含2个字符,你为什么要写字 inst.substr(2);
它意味着您从索引2到结束获取字符串中的数据。你确定这是你想做的吗? 如果您想要的是确保前2个字符,那么您应该写下 而是inst.substr(0,2);