将每个数字从保存在字符串中的数字转换为 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)-&gt;DFA::final_states.std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::at&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;(((std::basic_string&lt;char&gt;::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&amp; 值。

只需将您的作业线修改为

 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 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 std::string 中仅将数字转换为 int

字符串数字转为int数,c语言来写?

Python学习笔记——Python Number(数字)

python把一个数字列表转化为一个数字

c语言中假设一个数组中已经存放若干个数字字符,编写程序,将每个数字字符转换成对应的数字后存放在另一个

将列表中的数字字符串转换为数字 int