#include<iostream>
#include<array>
#include<sstream>
#include<cctype>
#include<string>
using namespace std;
//判断是否为数字字符串,是就转换为double类型保存在num中
bool isNUM(string _str, double& num);
int main()
{
//读取十个字符串,是数字就保存在数组中,遇到不是数字停止
array<double,10> arr;
int count=0;
double donation;
string str;
cin>>str;
while(count<10 && isNUM(str,donation))
{
arr[count]=donation;
count++;
cin>>str;
}
for(int i=0;i<count;i++) //把保存的数字显示出来
cout<<arr[i]<<" ";
cout<<endl;
return 0;
}
bool isNUM(string _str,double& num)
{
int i=0;
char ch;
//************************************************
//依次判断单个字符是不是数字,如果全是数字,最后i=_str.size()
for(;i<_str.size();i++)
{
ch=_str[i];
if(!isdigit(ch)) //*********判断字符是否为数字
break;
}
if(i==_str.size())
{
//********************
//用stringstream,把string转换成其他类型
stringstream ss;
ss<<_str; //_str是string类型
ss>>num; //num是double类型
return true;
}
else
return false;
}
还可以利用stringstream
来判断是否为数字
bool isNUM2(string _str)
{
stringstream ss;
ss<<_str;
double d;
if(!(ss>>d)) //如果第一个字符就不是数字
return false;
char c;
if(ss>>c) //如果把前面的数字去掉后,后面还有字符,如 23wf
return false;
return ture;
}
可以用stringstream
来分割字符串,如
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
string str="123string123";
double num;
char ch;
string str1;
stringstream ss;
ss<<str;
ss>>num; //把ss流最前符合double的给num,其他依然留在ss流中
ss>>ch;
ss>>str1;
cout<<"num = "<<num<<endl;
cout<<"ch = "<<ch<<endl;
cout<<"str1 = "<<str1<<endl;
return 0;
}
则
num = 123
ch = s
str1 = tring123