2016-01-27 42 views
1

我有一个字符向量它总共包含252个字符。我试图过滤掉将它们放入自己的媒介中的单词,操作符和数字。铸造一个取消引用Char迭代器为int C++

我用迭代器来移动字符的向量。我遇到的问题是将数字(都是整数)放入整数向量中。

我试着将取消引用的迭代器投射到int,但它仍然存储十进制表示而不是char(48代表0,49代表1)。我可以使用我在其中从所有条目中减去48的代码。我想我只是想知道如果有一个更好的办法,或者如果这是“良好做法”

if(isdigit(*it)){ 
     int a = (int)*it; 
     NumList.push_back(a-48); 
     advance(it,1); 
} 

it是我用于遍历字符的矢量的迭代器。 NumList是一个载体,可以容纳我找到的所有数字。最初我只是尝试push_back(*it),显然没有奏效。我试过用我知道用普通变量工作的所有方法将*it转换为int

有什么方法可以使用吗?我在这里或在Cplusplusorg找不到一个。

P.S .:对不起,如果这是基本的我只是不太熟悉迭代器。谢谢你的帮助。

+4

'48'当然不是写'0'的好方法,但'a''0'是做这件事的最好方法。 –

+0

(int)*它是表示数字的字符数(以ASCII码表示),因此您必须减去48,或者如前面的注释所述,减去0,以得到数字的数字值。我不认为有更好的办法。 – Georg

回答

2

IIUC,你问的形式

inline int char_to_pos(char c) 

的功能的实现作为@nm指出正确的,一个好办法做到这一点是

inline int char_to_pos(char c) 
{ 
    return c - '0'; 
} 

由于是极少数不同的字符(256),您可以通过预处理使其更快一些。首先创建一个整数矢量,并在每个位置放置该位置,并将其减去'0'。这应该在char_to_pos的所有呼叫之前完成。之后,char_to_pos,当给出c时,将简单地重新调整pos[c](假设矢量是pos)。

在这种情况下,由于您对结果执行了push_back,所以这可能不是很重要。