當我將迭代器附加到字符串時,我遇到了一些意外的字符串行爲。基本上,我有讀取的線沿線的東西文件:C++追加字符串指針
int x := 10;
print x;
我有一個字符串已包含此文件的內容,而我通過它進行迭代,只是現在刪除空白。
void Lexer::parse()
{
Pointer = Filestring.begin(); // both private members
while(Pointer < Filestring.end())
{
if(is_whitespace(0)) // 0 indicates current Pointer position
{
advance(Pointer, 1);
continue;
}
CurToken.append(&*Pointer); // CurToken is private member string
advance(Pointer, 1);
}
cout << CurToken << endl;
}
通過循環結束時,我會期望CurToken是沒有包含任何內容,但是去除了所有空白字符的字符串。相反,我得到類似如下:
int x := 1 + 2;
print x;
nt x := 1 + 2;
print x;
t x := 1 + 2;
print x;
...
rint x;
int x;
nt x;
t x;
x;
;
我認爲這個問題是去引用指針,如果是這樣,我怎麼能追加當前指針位置的字符?如果我沒有反駁它,我最終與invalid conversion from ‘char’ to ‘const char*’
注意: is_whitespace()我測試過了,並按預期工作。所以這可以排除爲一個可能的問題。
什麼是「指針」? – karlphillip 2012-04-19 14:53:44
你爲什麼不寫''而不是'指針'而是'++ it'而不是'advance(指針,1)'?另外,爲什麼不['std :: isspace(* it)'](http://en.cppreference.com/w/cpp/string/byte/isspace)而不是'is_whitespace(0)'?你不必要地使它變得複雜。 – Nawaz 2012-04-19 14:55:49
指針是一個字符串迭代器* – grep 2012-04-19 14:55:55