C++将字符串内的数字分离出来,字符串内包含double和int
时间: 2023-07-15 12:10:48 浏览: 89
可以使用字符串流 stringstream 来实现。
具体步骤如下:
1. 包含头文件 #include <sstream>
2. 定义一个 stringstream 对象
3. 将字符串输入到 stringstream 对象中
4. 使用 >> 操作符从 stringstream 对象中提取数字,直到无法继续提取
5. 将提取出的数字存储到一个容器中(如 vector)
6. 处理存储在容器中的数字
代码示例:
```c++
#include <iostream>
#include <sstream>
#include <vector>
int main() {
std::string s = "123.45 678 90.1";
std::stringstream ss(s);
std::vector<double> nums;
double num;
while (ss >> num) {
nums.push_back(num);
}
for (double n : nums) {
std::cout << n << std::endl;
}
return 0;
}
```
输出结果:
```
123.45
678
90.1
```
相关问题
C++将字符串内的数字分离出来,字符串内包含double和int和string
在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>输出结果。
C++字符串转换为double或者int
在C++中,将字符串转换为`double`或`int`通常需要借助标准库中的函数。以下是两种常见的方法:
1. **使用`std::stod()`和`std::stoi()`函数**:
- `std::stod()`用于将字符串转换成`double`类型的值。例如:
```cpp
std::string str_num = "3.14";
double num = std::stod(str_num);
```
- `std::stoi()`或`std::stoi(str_num, nullptr, 10)`用于将字符串转换成`int`类型,如果字符串含有非数字字符,会抛出异常。例如:
```cpp
std::string str_int = "123";
int num_int;
if (std::stoi(str_int, &num_int) && !std::cin.fail()) {
// 成功转换
} else {
// 转换失败
}
```
2. **异常处理**:
如果不确定字符串是否能成功转换,可以使用try-catch块来捕获可能出现的`std::invalid_argument`或`std::out_of_range`异常,例如:
```cpp
try {
double num = std::stod(str_num);
} catch (const std::invalid_argument& e) {
// 转换失败,处理错误
}
```
记得检查转换结果的有效性,因为字符串可能是空、无效格式或者其他非预期的内容。
阅读全文