我正在尝试将两个字符的字符串转换为整数,但我得到了
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 ++很新,所以尝试从向量中传入字符串很可能是一个问题,但我不确定。如果我需要发布任何其他内容,请告诉我。任何帮助将不胜感激。
答案 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);
。