我正在DFA上编写这个项目,我想保存并将保存为字符串的整数的每个数字转换为int数组。这是负责该函数的函数的代码:
int l=final_states.size();
int* temp_final;
temp_final=new int [l];
for(int i=0;i<l;i++)
{
temp_final[i]=atoi(final_states.at(i).c_str());
}
这给了我以下错误:request for member 'c_str' in '((DFA*)this)->DFA::final_states.std::basic_string<_CharT, _Traits, _Alloc>::at<char, std::char_traits<char>, std::allocator<char> >(((std::basic_string<char>::size_type)i))', which is of non-class type 'char'|
。
因此,如果您能告诉我如何进行此转换并保存工作,那就太棒了。
答案 0 :(得分:0)
atoi()
函数需要const char*
,您无法使用.c_str()
的结果调用.at(i)
,实际上是char&
值。
只需将作业行修改为
即可 temp_final[i] = int(final_states[i]) - int('0');
虽然你也可以在将它放入结果数组之前检查你是否真的have a digit there:
if(std::isdigit(final_states[i])) {
temp_final[i] = int(final_states[i]) - int('0');
}
else {
// Skip, or throw error ...
}
答案 1 :(得分:0)
c_str()
doest不起作用,因为在调用at(i)
之后你有一个char而不是字符串。我建议你使用:
temp_final[i]=final_states.at(i) - '0';
在这里你为一个char符号取一个ASCII码,当你减去一个'0'
时,你得到一个你需要的int,因为所有数字都按照ASCII table的顺序排列。