1
作爲一個練習,我試圖創建一個輸入流操縱器,它會吸取字符並將它們放入字符串中,直到遇到特定字符或直到達到eof。這個想法來自布魯斯Eckel的「在C++思考」頁249創建輸入流操縱器
下面的代碼我到目前爲止:
#include <string>
#include <iostream>
#include <istream>
#include <sstream>
#include <fstream>
#include <iomanip>
using namespace std;
class siu
{
char T;
string *S;
public:
siu (string *s, char t)
{
T = t;
S = s;
*S = "";
}
friend istream& operator>>(istream& is, siu& SIU)
{
char N;
bool done=false;
while (!done)
{
is >> N;
if ((N == SIU.T) || is.eof())
done = true;
else
SIU.S->append(&N);
}
return is;
}
};
,並對其進行測試....
{
istringstream iss("1 2 now is the time for all/");
int a,b;
string stuff, zork;
iss >> a >> b >> siu(&stuff,'/');
zork = stuff;
}
的想法因爲siu(& stuff,'/')會從iss中吸取字符,直到它遇到/。我可以用調試器看它,因爲它通過'/' 獲得字符'n''o''w'並終止循環。這一切似乎都在發展,直到我看到Stuff。東西有現在的角色等但它們之間有6個額外的字符。下面是一個示例:
- &東西0x0012fba4 {0x008c1861 「nÌÌÌýoÌÌÌýwÌÌÌýiÌÌÌýsÌÌÌýtÌÌÌýhÌÌÌýeÌÌÌýtÌÌÌýiÌÌÌýmÌÌÌýeÌÌÌýfÌÌÌýoÌÌÌýrÌÌÌýaÌÌÌýlÌÌÌýlÌÌÌý」}
這是怎麼回事?
謝謝!如此接近但沒有雪茄。我將它改爲SIU.S-> append(&N,1),因爲我確實想包括空格,所以我替換了>> N;與N = is.get()。似乎按我現在所希望的那樣工作。 – 2010-08-27 01:55:13
更簡單:while(is >> n)siu.s + = n;注意:所有大寫標識符 - 按照慣例 - 爲預處理器定義保留...使用它們會導致很難追蹤的錯誤。 (雖然奇怪的是,單個字母的ala模板,U等是常見的實踐) –
2010-08-27 02:23:58
@Tony:任何不以任何下劃線開頭的東西都是語言保留的。不過,任何優秀的風格指南都包含該規則。 – Potatoswatter 2010-08-27 05:54:51