获取cin输入并转化基本类型输出

作者在 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;
 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;
}
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;
}
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;
}
c++输入输出 | 阅读 714 次
文章评论,共0条
游客请输入验证码
浏览1548次
最新评论