作者在 2009-09-13 14:46:36 发布以下内容
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
template<typename T>
T str_To(const string& str);
template<typename T>
int mygetsubStr(vector<T>& vecsubstr, const string& sourcestr,const string& _delims="",const string& _stopstr="");
int main()
{
string str;
int ncheck;
vector<double> vecVal;
#include<string>
#include<sstream>
#include<vector>
using namespace std;
template<typename T>
T str_To(const string& str);
template<typename T>
int mygetsubStr(vector<T>& vecsubstr, const string& sourcestr,const string& _delims="",const string& _stopstr="");
int main()
{
string str;
int ncheck;
vector<double> vecVal;
while(getline(cin,str)){
ncheck=mygetsubStr<double>(vecVal,str);
if(ncheck==1) break;
}
for(int i=0;i<vecVal.size();i++){
std::cout<<vecVal[i]<<std::endl;
}
return 0;
}
ncheck=mygetsubStr<double>(vecVal,str);
if(ncheck==1) break;
}
for(int i=0;i<vecVal.size();i++){
std::cout<<vecVal[i]<<std::endl;
}
return 0;
}
template<typename T>
T str_To(const string& str)
{
stringstream mycin(str);
T val;
if(!(mycin>>val)) throw runtime_error("error datatype call");
return val;
}
T str_To(const string& str)
{
stringstream mycin(str);
T val;
if(!(mycin>>val)) throw runtime_error("error datatype call");
return val;
}
template<typename T>
int mygetsubStr(vector<T>& vecsubstr, const string& sourcestr,const string& _delims,const string& _stopstr)
{
string str;
string delims=_delims,stopstr=_stopstr;
T val;
//\t=tab
if(delims.empty()) delims =" ,.;\t";
if(stopstr.empty()) stopstr ="stop";
string::size_type begIdx,endIdx;
//查找第一个非间隔符的字符串的位置
begIdx=sourcestr.find_first_not_of(delims);
//不超过字符串最大长度搜索
while(begIdx!=string::npos){
//初始化
str="";
//找到每个字符串后一个字符
endIdx=sourcestr.find_first_of(delims,begIdx);
if(endIdx==string::npos) endIdx=sourcestr.size();
//保存字符串
string::size_type i;
for(i=begIdx;i<endIdx;i++){
str+=sourcestr[i];
}
//如果取得停止符,返回1
if(str==stopstr) return 1;
val=str_To<T>(str);
vecsubstr.push_back(val);
//再次查找非间隔符的字符串的起始位置
begIdx=sourcestr.find_first_not_of(delims,endIdx);
}
return 0;
}
int mygetsubStr(vector<T>& vecsubstr, const string& sourcestr,const string& _delims,const string& _stopstr)
{
string str;
string delims=_delims,stopstr=_stopstr;
T val;
//\t=tab
if(delims.empty()) delims =" ,.;\t";
if(stopstr.empty()) stopstr ="stop";
string::size_type begIdx,endIdx;
//查找第一个非间隔符的字符串的位置
begIdx=sourcestr.find_first_not_of(delims);
//不超过字符串最大长度搜索
while(begIdx!=string::npos){
//初始化
str="";
//找到每个字符串后一个字符
endIdx=sourcestr.find_first_of(delims,begIdx);
if(endIdx==string::npos) endIdx=sourcestr.size();
//保存字符串
string::size_type i;
for(i=begIdx;i<endIdx;i++){
str+=sourcestr[i];
}
//如果取得停止符,返回1
if(str==stopstr) return 1;
val=str_To<T>(str);
vecsubstr.push_back(val);
//再次查找非间隔符的字符串的起始位置
begIdx=sourcestr.find_first_not_of(delims,endIdx);
}
return 0;
}