将每个数字从保存在字符串中的数字转换为int数组

时间:2014-05-21 20:31:13

标签: c++ string type-conversion atoi

我正在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'|


因此,如果您能告诉我如何进行此转换并保存工作,那就太棒了。

2 个答案:

答案 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的顺序排列。