std::length_error what(): basic_string::_M_replace[Solved]

本文探讨了使用C++处理字符串时遇到的常见问题,特别是如何正确去除字符串前后的空白字符,避免使用str.assign和str.erase方法时可能出现的错误。文章详细分析了find_first_of和find_first_not_of方法的正确用法,并提供了有效的解决方案。
部署运行你感兴趣的模型镜像

问题

写LeetCode 第8题的时候,遇到了这个问题.
在这里插入图片描述

原因

str.erase(0, str.find_first_not_of(' '));
str.assign(str.begin(),str.begin() + str.find_first_of(' '));

由于需要去除字符串的前后干扰字符 比如 " -42 with word",我需要得到-42这个数,就需要去除前面的空格,所以采用了erase的方法,然后截取到非空格的地方.
但是 find_first_of()方法可能找不到空格,那该方法就会返回std::string::npos
其实最主要是C++标准未提供截取字符串的方法.而是提供了最基本的find操作.

by the way : npos的定义

static const size_type npos = -1;

解决

先通过 find_first_of()判断下是不是存在要找的部分

if(str.find_first_of(' ')!=std::string::npos){
     str.assign(str.begin(),str.begin() + str.find_first_of(' '));
 }

本质

在这里插入图片描述

其实本质问题(合理的猜测)是:assgin方法不可以assign(s.begin(),s.begin()-1),这需要读下源码.(至少LeetCode的编译器是这样的,因为我用g++编译是没有问题的,也不抛异常).而erase方法可以这样调用erase(0,-1);
在这里插入图片描述
也排除了begin()-1的访问.
在这里插入图片描述

所以基本可以肯定是assign的问题

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 关于Spring Boot本地运行时出现`ERR_CONNECTION_REFUSED`的解决方案 当在Spring Boot项目中启动调试并尝试通过Swagger或其他工具进行API测试时,如果遇到`ERR_CONNECTION_REFUSED`错误,通常意味着客户端无法与服务器建立连接。以下是可能导致该问题的原因及其对应的解决办法: #### 1. **检查应用程序配置文件中的端口设置** 默认情况下,Spring Boot应用会监听8080端口。然而,在某些场景下,开发者可能会修改`application.properties`或`application.yml`文件中的端口号。因此,需确认实际使用的端口是否匹配。 ```properties server.port=8080 ``` 如果没有显式指定端口,则可以假设其为8080。若发现端口冲突或者未正确绑定到预期端口,请调整上述属性值[^1]。 #### 2. **验证服务是否正常启动** 有时尽管程序看似已成功部署完毕,但实际上由于内部异常而未能真正完成初始化流程。此时可通过日志观察是否存在潜在隐患;另外一种情况是虽然进程存在却并未开启HTTP接口监听功能——这可能是由代码逻辑缺陷引起[^2]。 对于这种情况,建议仔细阅读控制台打印出来的消息记录来定位具体原因所在之处,并修复相应部分后再重新执行构建过程直至完全无误为止。 #### 3. **确保防火墙不会阻止流量进入目标机器上的特定端口** 即使一切看起来都按计划行事,外部因素也可能干扰通信链路的有效性。比如操作系统自带的安全防护机制(Windows Defender Firewall/Linux iptables etc.) 可能会对未经许可的数据包实施拦截操作 。所以有必要临时关闭这些保护措施来进行初步诊断测试 ,然后再考虑长期策略如何平衡安全性需求同功能性要求之间的关系 [^3]. #### 4. **核对URL路径准确性以及跨域资源共享(CORS)政策限制** 除了基本网络层面之外 , 还应该留意Web API设计本身所涉及的一些细节方面 . 如果前端页面试图调用后端RESTful风格的服务资源但是遭遇到了权限方面的阻碍的话(即所谓的Cross-Origin Resource Sharing issue),那么就需要从以下几个角度出发去寻找突破口 : - 确认前后两端交互过程中采用的方法类型(GET, POST, PUT...) 是否均已被允许列表覆盖. - 查看是否有额外头部字段附加进来需要特别处理的情况发生 . 针对以上提到的内容点我们可以做出如下改动以便更好地支持多源环境下的正常使用情景 : ```java @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 允许所有的路由都被访问 .allowedOrigins("*") // 放宽至接受任意来源站点发起请求 .allowedMethods("GET", "POST", "PUT", "DELETE"); // 明确列出可被执行的操作种类 } }; } ``` 值得注意的是这里仅作为演示用途展示了一种较为宽松的形式设定方式; 实际生产环境中应当依据具体情况制定更为严谨细致的规定条款以保障系统的整体健壮性和可靠性水平 [^5]. --- ### 总结 综上所述,面对`ERR_CONNECTION_REFUSED`这类常见却又棘手的问题时,可以从多个维度切入分析查找根本症结之所在并通过采取针对性强的技术手段加以克服化解困难局面达成最终目的 —— 让您的Spring Boot应用程序平稳高效地服务于广大用户群体之中! ```python print("Problem Solved!") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值