C++将字符串内的数字分离出来,字符串内包含double和int和string
时间: 2023-07-15 12:10:45 浏览: 185
在C++中,可以使用stringstream和isdigit函数将字符串内的数字分离出来。具体步骤如下:
1.引入头文件#include <sstream>
2.将字符串放入stringstream对象中
3.使用循环逐个字符读取stringstream对象中的字符,并使用isdigit函数判断是否为数字
4.将连续的数字字符组成一个字符串,转换成数字类型并存储起来
下面是一个示例代码,可以将字符串中的数字分离出来并存储在vector<double>和vector<int>中:
```
#include <iostream>
#include <vector>
#include <sstream>
#include <ctype.h>
using namespace std;
int main()
{
string str = "12.3 abc 45 6.7 def 89 xyz";
stringstream ss(str);
vector<double> doubles;
vector<int> ints;
string tmp;
while (ss >> tmp)
{
double d;
int i;
stringstream ss_tmp(tmp);
if (ss_tmp >> d)
{
doubles.push_back(d);
}
else if (ss_tmp >> i)
{
ints.push_back(i);
}
for (int j = 0; j < tmp.size(); j++)
{
if (isdigit(tmp[j]))
{
string num_str;
num_str += tmp[j];
while (j < tmp.size() - 1 && isdigit(tmp[j + 1]))
{
j++;
num_str += tmp[j];
}
if (sscanf(num_str.c_str(), "%d", &i) == 1)
{
ints.push_back(i);
}
else if (sscanf(num_str.c_str(), "%lf", &d) == 1)
{
doubles.push_back(d);
}
}
}
}
for (int i = 0; i < doubles.size(); i++)
{
cout << "Double: " << doubles[i] << endl;
}
for (int i = 0; i < ints.size(); i++)
{
cout << "Int: " << ints[i] << endl;
}
return 0;
}
```
在上面的示例代码中,先将字符串放入stringstream对象中,然后使用while循环逐个读取stringstream对象中的字符串,使用stringstream对象分别尝试将其转换成double和int类型。如果可以转换成功,则直接存储到vector<double>或vector<int>中。如果不能转换成功,则使用isdigit函数判断是否为数字字符,如果是数字字符,则将连续的数字字符组成一个字符串,然后使用sscanf函数尝试将其转换成double或int类型,如果转换成功,则存储到vector<double>或vector<int>中。最后遍历vector<double>和vector<int>输出结果。
阅读全文