解析两个被逗号 或 空格 隔开的 科学记数法的数

#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++标准库函数不太熟悉的读者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值