本文整理汇总了C++中stringstream::get方法的典型用法代码示例。如果您正苦于以下问题:C++ stringstream::get方法的具体用法?C++ stringstream::get怎么用?C++ stringstream::get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stringstream
的用法示例。
在下文中一共展示了stringstream::get方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readCha
int readCha(string &res, stringstream &strIn) {
res = "";
char ch;
while (~(ch = strIn.get()) &&
(ch == ' ' || ch == '\n' || ch == '\t')) {
;
}
if (strIn.eof()) return END;
if (ch == '\'') {
res += ch;
strIn >> ch;
if (strIn.eof()) {
strIn.putback(ch);
return ERR;
}
if (ch == '\\') {
res += ch;
if ((ch = strIn.get()) == -1) return ERR;
res += ch;
if ((ch = strIn.get()) == -1 || ch != '\'') {
return ERR;
}
res += ch;
} else {
res += ch;
// cout << ch << endl;
if ((ch = strIn.get()) == -1 || ch != '\'') {
return ERR;
}
res += ch;
}
} else {
示例2: readInt
//checked
int readInt(string &fres, stringstream &strIn, bool can = true) {
if (can)
fres = "";
string res = "";
char ch;
while (~(ch = strIn.get()) &&
(ch == ' ' || ch == '\n' || ch == '\t')) {
;
}
if (strIn.eof()) return END;
if (ch == '+' || ch == '-' || (ch >= '0' && ch <= '9')) {
res += ch, fres += ch;
} else {
strIn.putback(ch);
return ERR;
}
while (~(ch = strIn.get()) &&
(ch >= '0' && ch <= '9')) {
res += ch, fres += ch;
}
int st = strIn.eof();
if (st) {
if (isdigit(res[0]) || (int)res.size() > 1)
return OKAY;
else return ERR;
}
strIn.putback(ch);
if ((int)res.size() == 1 && !isdigit(res[0])) {
strIn.putback(res[0]);
}
return isdigit(res[0]) || (int)res.size() > 1 ? OKAY : ERR;
}
示例3: GetColumn
int TablePaser::GetColumn(stringstream& ss_str, std::basic_istream<char>& in_put, string& column)
{
column = "";
if (ss_str.eof())
return -1;
char cur_char[2];
cur_char[1] = 0;
char separator = ' ';
if (ss_str.get(cur_char[0]).eof())
return 1;
if (cur_char[0] == ' ')
return 1;
else if (cur_char[0] == '"')
separator = '"';
else
column += string(cur_char);
while (1)
{
if (ss_str.eof())
{
if (separator == '"')
{
if (in_put.eof())
return 0;
column += string("\n\0");
ss_str.clear();
in_put.getline(LineData, LINE_DATA_MAX);
ss_str << LineData;
}
else
return 0;
}
ss_str.getline(LineData, 4096, separator);
column += LineData;
//column.append(LineData);
if (ss_str.eof())
continue;
if (separator == ' ')
return 1;
else if (separator == '"')
{
if (ss_str.eof())
return 0;
ss_str.get(cur_char[0]);
if (ss_str.eof())
return 1;
else if (cur_char[0] == ' ')
return 1;
else if (cur_char[0] != separator)
separator = ' ';
//column.push_back(cur_char);
column += string(cur_char);
}
}
return -1;
}
示例4: leeArbol
Arbin<Pieza> leeArbol(stringstream& ss) {
Arbin<Pieza> r;
if(ss.peek() == 'T') {
ss.get();
r = Arbin<Pieza>(leeArbol(ss), Pieza(), leeArbol(ss));
} else {
r = Arbin<Pieza>(Arbin<Pieza>(), tablaPiezas.consulta(ss.get()), Arbin<Pieza>());
}
}
示例5: trim
int Util::trim(stringstream &ss)
{
while(ss.peek()==' ')
ss.get();
return 0;
}
示例6: parse_char
int parse_char(stringstream& ss, char& cvar) {
char c;
if (!ss.get(c)) // read
return 1;
else if (c == '\\') { // check for escaped chars
if (!ss.get(c)) // read control char
return 2;
switch (c) {
case '0': cvar = '\0'; break;
case 'n': cvar = '\n'; break;
case 't': cvar = '\t'; break;
case 'b': cvar = '\b'; break; // backspace
case 'a': cvar = '\a'; break; // beep!
default: cvar = c; // just return the character
}
}
else
cvar = c;
return 0;
}
示例7: parse_network_result_output
void NetworkRenderer::parse_network_result_output(stringstream &recv_ss) {
int packet_number;
recv_ss>>packet_number;
recv_ss.get();
std::vector<Color> result;
while(recv_ss.good()) {
int ir,ig,ib;
ir=recv_ss.get();
ig=recv_ss.get();
ib=recv_ss.get();
float r,g,b;
r=(float)ir/(float)255;
g=(float)ig/(float)255;
b=(float)ib/(float)255;
if(recv_ss.good()) {
Color c(r,g,b);
result.push_back(c);
}
}
int height;
int act_height=CLIENT_TASK_LINES*packet_number;
if(act_height+CLIENT_TASK_LINES>rendering_height) {
height=rendering_height-act_height;
} else {
height=CLIENT_TASK_LINES;
}
// display.add_surface(0,act_height,rendering_width,height,result);
std::vector<Color> realresult;
for(int i=0;i<Settings::getAsInt("window_width")*5;i++) {
realresult.push_back(Color(1,0,0));
}
display.add_line_group(0,act_height,realresult);
Logger::log()<<"Received "<<packet_number<<" of "<<result.size()<<" (height="<<act_height<<")"<<std::endl;
// display.refresh_part_display_timecheck();
}
示例8: CIFReadValue
/// Read one value, whether it is numeric, string or text
string CIFReadValue(stringstream &in,char &lastc)
{
bool vv=false;//very verbose ?
string value("");
while(!isgraph(in.peek())) in.get(lastc);
while(in.peek()=='#')
{//discard these comments for now
string tmp;
getline(in,tmp);
lastc='\r';
while(!isgraph(in.peek())) in.get(lastc);
}
if(in.peek()=='_') {
if (vv)
cout << "WARNING: Trying to read a value but found a new tag !" << endl;
return value;
}
if(in.peek()==';')
{//SemiColonTextField
bool warning=!iseol(lastc);
if(warning)
cout<<"WARNING: Trying to read a SemiColonTextField but last char is not an end-of-line char !"<<endl;
value="";
in.get(lastc);
while(in.peek()!=';')
{
if (in.peek() == '_') {
cout << "WARNING: Trying to read a SemiColonTextField but found a new tag !" << endl;
warning = true;
break;
}
string tmp;
getline(in,tmp);
value+=tmp+" ";
}
if (!warning)
in.get(lastc);
if(vv) cout<<"SemiColonTextField:"<<value<<endl;
if(warning && !vv) cout<<"SemiColonTextField:"<<value<<endl;
return value;
}
if((in.peek()=='\'') || (in.peek()=='\"'))
{//QuotedString
char delim;
in.get(delim);
value="";
while(!((lastc==delim)&&(!isgraph(in.peek()))) )
{
in.get(lastc);
value+=lastc;
}
if(vv) cout<<"QuotedString:"<<value<<endl;
return value.substr(0,value.size()-1);
}
// If we got here, we have an ordinary value, numeric or unquoted string
in>>value;
if(vv) cout<<"NormalValue:"<<value<<endl;
return value;
}
示例9: Parse
void CIF::Parse(stringstream &in)
{
bool vv=false;//very verbose ?
char lastc=' ';
string block="";// Current block data
while(!in.eof())
{
stringstream mess;
mess<<"CIF: Parsing:"<<in.tellg();
(*fpObjCrystInformUser)(mess.str());
while(!isgraph(in.peek()) && !in.eof()) in.get(lastc);
if(in.eof()) break;
if(vv) cout<<endl;
if(in.peek()=='#')
{//Comment
string tmp;
getline(in,tmp);
if(block=="") mvComment.push_back(tmp);
else mvData[block].mvComment.push_back(tmp);
lastc='\r';
if(vv)cout<<"Comment:"<<tmp<<endl;
continue;
}
if(in.peek()=='_')
{//Tag
string tag,value;
in>>tag;
// Convert all dots to underscores to cover much of DDL2 with this DDL1 parser.
for (string::size_type pos = tag.find('.'); pos != string::npos; pos = tag.find('.', ++ pos))
tag.replace(pos, 1, 1, '_');
value=CIFReadValue(in,lastc);
if(value==string("?")) continue;//useless
mvData[block].mvItem[ci_string(tag.c_str())]=value;
if(vv)cout<<"New Tag:"<<tag<<" ("<<value.size()<<"):"<<value<<endl;
continue;
}
if((in.peek()=='d') || (in.peek()=='D'))
{// Data
string tmp;
in>>tmp;
block=tmp.substr(5);
if(vv) cout<<endl<<endl<<"NEW BLOCK DATA: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ->"<<block<<endl<<endl<<endl;
mvData[block]=CIFData();
continue;
}
示例10: readElement
void readElement(string& readed, stringstream &str) {
int c;
do {
c = str.get();
if (c != ';') {
if ((readed.length() != 0) || ((c != 13) && (c != 10))) {
if (str.good()) {
char str[2];
str[0] = c;
str[1] = '\0';
readed += str;
} else {
break;
}
}
}
} while (c != ';');
}
示例11: getWords
//Convert a stringstream into a set of words.
void getWords(stringstream& ss) {
stringstream temp;
char* word = new char [WORD_SIZE * 10];
//Filter Chars
for(int i=0; i<ss.str().length(); i++) {
temp << filterChars(ss.get());
}
//Clear first stream.
ss.str("");
//Check words
while(temp.getline(word, numeric_limits<streamsize>::max(), ' ')) {
if(filterWords(word)) ss << word << " ";
}
delete word;
return;
}
示例12: ReadLine
int ResourceParser::ReadLine(stringstream& p_stream, vector<string>& p_tokens, int& p_line)
{
p_tokens.clear();
size_t i = 0;
int result = READ_CHUNK;
char buf[LINE_BUFFER_SIZE];
for (; i < LINE_BUFFER_SIZE; ++i)
{
p_stream.get(buf[i]);
if (!p_stream.good() || ('\n' == buf[i]))
{
buf[i] = '\0';
++p_line;
break;
}
if (BLOCK_OPENING_BRACES.c_str()[0] == buf[i])
{
result = READ_BLOCK_OPEN;
buf[i + 1] = '\0';
break;
}
if (BLOCK_CLOSING_BRACES.c_str()[0] == buf[i])
{
result = READ_BLOCK_CLOSE;
buf[i + 1] = '\0';
break;
}
}
char* line = (char*)stringUtils::Trim(buf);
if ((nullptr == line) || (strlen(line) == 0) || (LINE_COMMENT == line[0]))
return READ_EMPTY;
stringUtils::Tokens(line, DELIMITERS, p_tokens);
return result;
}
示例13: getRule
unsigned int getRule(stringstream& ss, S2Setmap& pt2base, V2Imap& goodman) {
char c;
ss >> c;
assert(c == '(');
string sym = "";
ss >> sym;
unsigned int symI = sym2base[sym];
// printf("got symbol %s (%u)\n",sym.c_str(),symI);
vector<unsigned int> kSyms;
kSyms.push_back(symI);
while(true) {
c = ss.peek();
if(c == ' ') { //it's a space
ss.ignore(1); //ignore that space
} else if(c == '(') { //nonterminal
//get child node index
unsigned int index = getRule(ss,pt2base,goodman);
kSyms.push_back(index);
} else if (c == ')') {
ss.ignore(1); //burn closing paren
// printf("Finished Rule with sym %s and %lu kids\n",sym.c_str(),kSyms.size()-1);
unsigned int index = 0;
while(kSyms.size() > 3) { //try to add glue rule
// printf("K = %lu\n",kSyms.size());
unsigned int r = kSyms.back();
kSyms.pop_back();
unsigned int l = kSyms.back();
kSyms.pop_back();
unsigned int glueI = nSym*2;
vector<unsigned int> gluerule;
gluerule.push_back(glueI);//glue symbol
gluerule.push_back(l);
gluerule.push_back(r);
unsigned int glueindex = 0;
V2Imap::iterator fter = goodman.find(gluerule);
if(fter == goodman.end()) { //new node
goodman[gluerule] = goodmanIndex;
baseSym.push_back(glueI);
glueindex = goodmanIndex;
canL.push_back(false);
canR.push_back(false);
canL[l] = true;
canR[r] = true;
leftlook[l].push_back(make_pair(r,goodmanIndex));
bmap[make_pair(l,r)].insert(goodmanIndex);
goodmanIndex++;
} else { //seen it
glueindex = fter->second;
}
kSyms.push_back(glueindex);
}
V2Imap::iterator fter = goodman.find(kSyms);
if(fter == goodman.end()) { //new node
goodman[kSyms] = goodmanIndex;
baseSym.push_back(symI);
index = goodmanIndex;
canL.push_back(false);
canR.push_back(false);
goodmanIndex++;
if(kSyms.size() == 3) {
//add index -> l r
// printf("BR : %u -> %u %u\n",index,kSyms[1],kSyms[2]);
canL[kSyms[1]] = true;
canR[kSyms[2]] = true;
leftlook[kSyms[1]].push_back(make_pair(kSyms[2],index));
bmap[make_pair(kSyms[1],kSyms[2])].insert(index);
} else { //one child
//add index -> k
umap[kSyms[1]].insert(index);
//printf("UR : %u -> %u\n",index,kSyms[1]);
}
} else { //seen it
index = fter->second;
}
return index;
} else { //terminal
string term = "";
while(ss.peek() != ')') {
term += ss.get();
}
// printf("got terminal %s\n",term.c_str());
ss.ignore(1); //burn closing paren
//.........这里部分代码省略.........
示例14: readFloat
int readFloat(string &res, stringstream &strIn) {
// cout << strIn.str() << endl;
res = "";
char ch;
while (~(ch = strIn.get()) &&
(ch == ' ' || ch == '\n' || ch == '\t')) {
;
}
if (strIn.eof()) return END;
if (ch != '.' && ch != '+' && ch != '-' && !(ch <= '9' && ch >= '0')) {
return ERR;
}
if (ch == '.') {
res += ch;
if ((ch = strIn.get()) == -1 || !isdigit(ch)) {
if (!strIn.eof()) {
strIn.putback(ch);
}
strIn.putback(res[0]);
return ERR;
} else {
// cout << res << endl;
strIn.putback(ch);
// cout << ch << endl;
readInt(res, strIn, false);
// cout << res << endl;
if ((ch = strIn.get()) == -1 || ch != 'e') {
if (!strIn.eof()) {
strIn.putback(ch);
}
return OKAY;
} else {
res += ch;
if ((ch = strIn.get()) == -1 || !(ch == '+' || ch == '-' || isdigit(ch))) {
return ERR;
} else {
strIn.putback(ch);
if (readInt(res, strIn, false) == ERR) return ERR;
}
}
}
} else if (isdigit(ch)) {
strIn.putback(ch);
readInt(res, strIn, false);
if ((ch = strIn.get()) == -1 || ch != '.') {
if (ch != 'e') {
if (ch != -1)
strIn.putback(ch);
Revc(res, strIn);
return ERR;
} else {
res += ch;
if ((ch = strIn.get()) == -1 || !(ch == '+' || ch == '-' || isdigit(ch))) {
return ERR;
} else {
strIn.putback(ch);
if (readInt(res, strIn, false) == ERR) return ERR;
}
}
} else {
res += ch;
if ((ch = strIn.get()) == -1) {
return OKAY;
} else if (isdigit(ch)) {
strIn.putback(ch);
readInt(res, strIn, false);
if ((ch = strIn.get()) == -1 || ch != 'e') {
if (!strIn.eof())strIn.putback(ch);
return OKAY;
} else {
res += ch;
if ((ch = strIn.get()) == -1 || !(ch == '+' || ch == '-' || isdigit(ch))) {
return ERR;
} else {
strIn.putback(ch);
if (readInt(res, strIn, false) == ERR) return ERR;
}
}
} else if (ch == 'e') {
res += ch;
if ((ch = strIn.get()) == -1 || !(ch == '+' || ch == '-' || isdigit(ch))) {
return ERR;
} else {
strIn.putback(ch);
if (readInt(res, strIn, false) == ERR) return ERR;
}
} else {
strIn.putback(ch);
return OKAY;
}
}
} else {
}
return OKAY;
//.........这里部分代码省略.........