将每个数字从保存在字符串中的数字转换为 int 数组
Posted
技术标签:
【中文标题】将每个数字从保存在字符串中的数字转换为 int 数组【英文标题】:Convert each digit from number saved in string to array of int 【发布时间】:2014-05-21 20:31:13 【问题描述】:我正在 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'|
。
所以如果你能告诉我如何进行这种转换和保存工作,那就太好了。
【问题讨论】:
at
返回一个char
。你在那个char
上打电话给c_str
。也许你只是想做一个std::transform
。
@chris 我从来没有用过std::transform,但是如果我给它temp_final[i]=atoi(final_states.at(i)); 这是合乎逻辑的,它给了我这个错误 * 'const' 之前的预期主表达式|*
atoi
接受一个字符串。将字符传递给它不起作用。无论如何,我建议尝试学习如何使用预制算法,因为它们使您的意图非常清晰,没有错误,并且经过了不懈的性能测试。动态编写的循环不是这些。
【参考方案1】:
atoi()
函数需要一个const char*
,你不能用.at(i)
的结果调用.c_str()
,它实际上是一个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 ...
【讨论】:
【参考方案2】:c_str()
不起作用,因为在调用 at(i)
之后,你得到的是一个字符而不是字符串。我建议你使用:
temp_final[i]=final_states.at(i) - '0';
这里你为一个 char 符号取一个 ASCII 码,当你减去一个 '0'
时,你会得到一个你需要的 int,因为所有的数字都按 ASCII table 的顺序排列。
【讨论】:
以上是关于将每个数字从保存在字符串中的数字转换为 int 数组的主要内容,如果未能解决你的问题,请参考以下文章