我有一个字符向量,它总共包含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。:对不起,如果这是基本的,我对迭代器不是很熟悉。谢谢你的帮助。
答案 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
,因此不一定非常重要。