完成一个函数:用户输入的是以逗号分隔的字符串,程序会先将其转换为整数或双精度浮点数数组
时间: 2024-10-11 16:10:12 浏览: 6
在C++中,你可以编写一个名为`parseNumbersFromString`的函数来完成这个任务。这个函数可以接受两个模板参数,一个是表示数据类型的参数(如`std::int32_t`或`double`),另一个是用于分割字符串的分隔符。下面是一个简单的实现:
```cpp
#include <iostream>
#include <sstream>
#include <vector>
#include <stdexcept>
// 助手函数,将字符串转换为指定类型
template <typename T>
T convertStringToNumber(const std::string& str) {
T value;
std::istringstream iss(str);
if (!(iss >> value)) {
throw std::invalid_argument("Failed to parse number from string.");
}
return value;
}
// 主函数:从字符串中解析数字并返回整数或双精度浮点数数组
template <typename NumberType>
std::vector<NumberType> parseNumbersFromString(const std::string& input, char delimiter) {
std::vector<NumberType> numbers;
std::string token;
std::istringstream iss(input);
while (iss >> token) {
if (token.empty()) continue; // 跳过空格
try {
numbers.push_back(convertStringToNumber<NumberType>(token));
} catch (const std::invalid_argument& e) {
std::cerr << "Invalid number encountered: " << e.what() << std::endl;
break; // 如果遇到无法解析的数字,停止解析
}
}
return numbers;
}
int main() {
std::string userInput;
std::cout << "Enter a comma-separated sequence of numbers: ";
std::getline(std::cin, userInput);
std::vector<int> integers = parseNumbersFromString<int>(userInput, ',');
std::vector<double> doubles = parseNumbersFromString<double>(userInput, ',');
for (auto num : integers) {
std::cout << num << ' ';
}
std::cout << "\n";
for (auto num : doubles) {
std::cout << num << ' ';
}
std::cout << "\n";
return 0;
}
```
在这个例子中,`convertStringToNumber`函数负责将单个字符串转换为指定的数值类型,如果转换失败则抛出异常。`parseNumbersFromString`函数读取输入流中的每个非空字符串,尝试转换为数字并存储在结果向量中。
当运行这个程序时,用户会被提示输入一串由逗号分隔的数字,程序会分别输出这些整数和双精度浮点数。如果遇到无法解析的数字,程序会停止并显示错误信息。