将一个dereference Char迭代器转换为int C ++

时间:2016-01-27 05:10:53

标签: c++ vector casting iterator

我有一个字符向量,它总共包含252个字符。我试图过滤出单词,运算符和数字,将它们放入自己的向量中。

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

我尝试将解除引用的迭代器强制转换为 List<Integer> listForBubbleSort = Arrays.asList(5, 4, 3, 7, 6, 9, 11, 10, 21); final List<Integer> copiedList = new ArrayList<>(listForBubbleSort); copiedList.add(Integer.MAX_VALUE); final List<Integer> bubbleSorted = new ArrayList<>(); copiedList.stream() .reduce((c, e) -> { if ( c < e ){ bubbleSorted.add(c); return e; } else { bubbleSorted.add(e); return c; } } ); System.out.println(bubbleSorted); ,但它仍然存储十进制表示而不是int(48表示0,49表示1)。我可以使用我在其中从所有条目中减去char的代码。我想我只是想知道是否有更好的方法,或者这是不是很好的做法&#34;

48

if(isdigit(*it)){ int a = (int)*it; NumList.push_back(a-48); advance(it,1); } 是我用来遍历字符向量的迭代器。 it是一个向量,用于保存我找到的所有数字。最初我只是尝试NumList显然没有工作。我已经尝试将push_back(*it)投射到*it以我知道的所有与正常变量一起使用的方式。

是否有使用方法或其他方法。我无法在这里或在Cplusplusorg找到一个。

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

1 个答案:

答案 0 :(得分:2)

IIUC,您正在询问表格

功能的实施情况
inline int char_to_pos(char c)

正如@n.m正确指出的那样,一个好方法就是

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

由于存在非常少量的不同字符(256),因此可以通过预处理使其更快一些。首先创建一个int的向量,并在每个位置放置由'0'减去的位置。这应该在调用char_to_pos之前完成。在此之后,char_to_pos,在给定c时,只需重新调整pos[c](假设向量为pos)。

在这种情况下,由于您在结果上执行了push_back,因此不一定非常重要。