#include <iostream>
#include <sstream>
#include <string>
#include <vector>
std::vector<double> parseScientificNotation(const char* buffer, char delimiter) {
std::vector<double> values;
std::istringstream iss(buffer);
std::string token;
// 如果两个读数由换行符分隔,可以使用std::getline
/*while (std::getline(iss, token)) {
double value = std::stod(token);
values.push_back(value);
}*/
//如果两个读数由空格或制表符分隔,可以直接使用>>运算符
while (iss >> token) {
double value = std::stod(token);
if (!iss.fail()) { // 检查stod是否成功
values.push_back(value);
}
else {
iss.clear(); // 清除失败标志
iss.ignore(std::numeric_limits<std::streamsize>::max(), delimiter); // 忽略分隔符和之后的任何字符
}
}
return values;
}
int main() {
static char szBuff[1024] = "1.23E-4 5.67e+2\n"; // 示例字符串
std::vector<double> readings = parseScientificNotation(szBuff, ' '); // 如果由空格分隔,使用空格作为分隔符
// 如果由换行符分隔,将' '替换为'\n'
for (double reading : readings) {
std::cout << "Converted value: " << reading << std::endl;
}
return 0;
}
去除字符串中的 '空格' 和 '*', 下边是几种解决方法的写法:
当字符串是 * 1.23E-4 类似这样的字符串,就是科学计数法的数的周围有 ‘空格’ 和 ‘*’,但是又不确定究竟有几个的时候,是以什么排序存在的情况下,采用下边的几种方法。
str.erase(std::remove_if(str.begin(), str.end(), [](char c) { return c == '*' || c == ' '; }), str.end());
换一种简单的写法
第1种:
可以使用C++11中的std::remove_if和lambda函数来移除特定字符,但还有一种更简洁的方法是使用C++标准库中的std::string::erase和std::remove,结合std::string的构造函数来完成这个操作。这里是一种更简单的写法:
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string str = "Hello *World* with* spaces";
str.erase(std::remove(str.begin(), str.end(), '*'), str.end());
str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
std::cout << str << std::endl; // 输出 "HelloWorldwithspaces"
return 0;
}
第2种:
或者,更简洁的一种方法是直接使用std::remove_if和std::string::erase结合来实现:
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string str = "Hello *World* with* spaces";
str.erase(std::remove_if(str.begin(), str.end(), [](char c) {
return c == '*' || c == ' ';
}), str.end());
std::cout << str << std::endl; // 输出 "HelloWorldwithspaces"
return 0;
}
这两种方法都可以有效地移除字符串中的特定字符。第一种方法通过两次调用std::remove来移除*和空格,第二种方法使用std::remove_if和lambda函数一次性移除满足条件的字符。根据具体需求选择合适的方法即可。
第3种:
当然可以,这里有一种更易读的写法,可以更清晰地理解移除字符的过程:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello *World* with* spaces";
// 创建一个新的字符串来存储结果
std::string result;
// 遍历原字符串中的每个字符
for (char c : str) {
// 如果字符不是 '*' 且不是 ' ',则将其添加到结果字符串中
if (c != '*' && c != ' ') {
result += c;
}
}
// 将原字符串替换为结果字符串
str = result;
std::cout << str << std::endl; // 输出 "HelloWorldwithspaces"
return 0;
}
在这个例子中,我们使用了一个循环遍历字符串中的每个字符,然后通过检查每个字符是否是*
或空格来决定是否将其添加到结果字符串中。这种方法更加直观易懂,特别适合那些对C++标准库函数不太熟悉的读者。