首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

由于存在一些看不见但看起来像空格的字符,std::string上的substr无法正常工作

std::string上的substr函数是用于截取字符串的子串的。然而,在某些情况下,由于存在看不见但看起来像空格的字符,substr函数可能无法正常工作。

这种情况通常是由于字符串中的特殊字符引起的,如制表符、回车符或换行符。这些字符在字符串中不可见,但实际上占据了字符的位置,导致substr函数无法正确地计算子串的起始和结束位置。

为了解决这个问题,可以尝试使用其他函数来替代substr函数,或者使用一些额外的操作来处理特殊字符。以下是一些解决方案:

  1. 使用find和substr函数结合:可以使用find函数来查找特殊字符的位置,然后使用substr函数来截取子串。例如,如果要截取从特殊字符后的子串,可以使用以下代码:
  2. 使用find和substr函数结合:可以使用find函数来查找特殊字符的位置,然后使用substr函数来截取子串。例如,如果要截取从特殊字符后的子串,可以使用以下代码:
  3. 这样就可以正确地截取从制表符后的子串。
  4. 使用正则表达式:如果需要处理更复杂的特殊字符,可以考虑使用正则表达式来匹配和截取子串。C++11及以上版本的标准库提供了std::regex类,可以方便地进行正则表达式操作。
  5. 使用循环遍历字符:如果特殊字符的位置较难确定,可以考虑使用循环遍历字符串的每个字符,并根据特殊字符的条件来截取子串。这种方法比较灵活,但可能需要更多的代码量。

综上所述,当std::string上的substr函数无法正常工作时,可以尝试使用find和substr函数结合、正则表达式或循环遍历字符来解决问题。在具体场景中,选择合适的方法来处理特殊字符,确保正确地截取子串。如果你正在使用腾讯云的相关产品,你可以参考腾讯云的文档和开发者社区获取更多关于字符串处理的技术和解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++之split字符串分割

类型字符串,将结果保存在vector中 思路:先将整个string字符串转换为char*类型,分割后得到char*类型字符串,将子字符串转换为string类型,并存入结果数组中。...<< "******test3****** "<<endl; string s = "my name is lmm ";//连续多个空格空格会被过滤掉 std::vector<string...,空格都会被过滤掉 2、借助于stringfind和substr函数 1)find函数 函数原型:size_t find(const string& str, size_t pos = 0) const...2)substr函数 函数原型:string substr(size_t pos = 0, size_t n = npos) const; 功能说明:获取从指定起始位置开始,长度为n字符串 参数说明...pos之前字符串是分隔出来字符串 if( pos < size) { //如果查找到,如果没有查找到分隔符,pos为string::npos string s = strs.substr(

5.4K30
  • 【C++】string类(下)

    = s1.end()) { //*it = 2; //由于it可以看作指针,由const修饰后,it指向内容不能被修改 cout << *it << endl;...) 例题 替换空格空格替换成%20 #include #include using namespace std; //替换空格问题 int main() {...} string类中swap与类模板中swap功能相同, stringswap只能针对string完成交换,而类模板swap,可以对任意类型完成交换 stringswap更高效一点,直接修改两者指针指向...len个字符子串 string substr (size_t pos = 0, size_t len = npos) const; 从后往前查找字符 #include #include...return 0; } 有可能存在多个.存在,所以从后往前找后缀名 11. getline 用来解决cin遇见空格停止情况 流提取默认使用空格/换行是多个值之间分隔符 getline遇到换行结束

    35020

    【C++初阶】string认识与学习

    string遍历有很多种方法: 1.C语言中数组遍历方式 string s("hello world"); for (int i = 0; i < s.size(); i++)...迭代器是指针一样类型,并不完全是指针,它提供了一种统一方式修改和访问容器数据,不像前两种方式需要是数组,且范围for是用迭代器实现。...四.string类对象容量操作 size和lengh功能差不多,还是推荐用size; resize可以设置size,如果你设置比你实际有效数据小,则多会被舍弃: reserve...string类对象接口,但我们最常用,用最爽还是 += ,这个清楚明了,你不用担心它容量问题,它会自动扩容 它支持string类对象,常量字符串,字符。...(包括空格) 这个就弥补了cin>> 不足,cin>> 是遇到空格就停止读取了。

    11810

    c++ string_view

    实际我们本意并不是要改变原字符串,为什么不在原字符串基础返回呢? 在C++17中引入了string_view,能很好解决以上两个问题。...s); 基本都是自解释,唯一需要说明是:为什么我们代码string_view foo(string("abc"))可以编译通过,为什么没有对应构造函数?...只不过是相比const string&,string_view少了拷贝损耗。实际我们完全可以用[const] char*接收所有的字符串,这个类型太底层了,不便使用。...在某些情况下,我们转为string_view可能仅仅是想用其中一些函数,比如substr。...() { std::string s = "hello"; auto sv = id(s + " world"); } 四、总结 string_view解决了一些痛点,同时也引入了指针和引用一些老问题

    35420

    网络基础『 序列化与反序列化』

    这可难到了张三,因为他 英语 可谓是十分差劲,母语差异导致双方无法正常交流,信息也无法传达,张三急中生智,打开了手机上 同声传译功能,可以将信息转换为对方能听懂语言,在工具帮助之下外国友人最终知晓了厕所位置...,前者是对端接收到消息后无法解析,后者则是存在平台兼容问题(不同平台结构体内存规则可能不同,会导致读取数据出错) 要想确保双方都能正确理解 协议,还需要进行 序列化与反序列化 处理 2.什么是序列化与反序列化...std::string strLen = inBuff.substr(0, pos); // 有效载荷长度 int packLen = strLen.size() + HEAD_SEP_LEN...序列化和反序列化 过程 12.使用库 事实,序列化与反序列化 这种工作轮不到我们来做,因为有更好更强库,比如 Json、XML、Protobuf 等 比如我们就可以使用 Json 来修改程序 首先需要安装...return 0; std::string strLen = inBuff.substr(0, pos); // 有效载荷长度 int packLen

    14200

    【C++修炼之路】8. string类详解

    如下: #include using namespace std; 此语句必不可少,否则有的编译器无法识别 1.2 string函数列表 begin 得到指向字符串开头Iterator...事实对于一些线程,网络,Linux内核等都是通过C实现,因此c_str很好充当了一个C++中string与C之间互通,因为我们知道,对于string定义变量名,不是内部字符地址,因此就出现了...,这样插入,实际底层都会将后面的数据进行挪动,因此效率难免会低一些。...(下面讲解迭代器使用) 15. 迭代器(iterator) 迭代器实际是一个指针一样东西,这是对行为来说。...(找最后一个.是由于在Linux下文件可能存在类似于test.cpp.zip.tar文件名,而其文件类型其实是tar) void test_string11() { string file; cin

    69400

    C++服务性能优化道与术-道篇:google benchmark安装与使用

    实战演练,split性能对比 我们以字符串切分为例,实战演练一把benchmark基本使用方法。由于C++没有官方提供字符split函数,所以我们可能见到过各种各样实现方式。...= std::string::npos) { vec.emplace_back(str, 0, pos); std::string new_s = str.substr(...,不考虑字符串作为分隔符情况,也不考虑连续空格是否要压缩成一个空格。...Time表示是真实时间,CPU表示是CPU时间,一般CPU时间会小于Time时间。我这个在我WSL测试,二者是一样。 好了,这就是benchmark入门教程了,十分简单是不是。...当然benchmark还有一些高级用法,本文就先不介绍了。 另外上面关于split函数测试结论,你可以自行修改编译器优化级别来看一下性能排名是否有变化。

    2K30

    Rust 开发命令行工具(

    当然,里面的有一些内容也会做一些简单梳理和讲解。这个就因人而异了,看大家实际情况吧。 ❝由于篇幅原因,我们打算写三篇文章(/中/下),来介绍如何用Rust来编写属于自己命令行工具。...程序名称后面的文本通常被称为命令行参数或命令行标志(特别是当它们看起来--这样时)。 ❝在操作系统内部通常将它们表示为「字符串列表」 - 简而言之,它们由空格分隔。...让我们还顺便写一些文档注释。 代码看起来这样(在文件src/main.rs中,在fn main() {之前): use clap::Parser; /// 在文件中搜索模式并显示包含它行。...如果result是一个错误,String将不存在。但由于程序在达到使用content地方之前会退出,所以没问题。...当执行这个宏时,程序会打印出一个错误信息,展开并清理栈数据,然后接着退出 ❞ 这可能看起来有点激进,非常方便。如果我们程序需要读取该文件,如果文件不存在无法执行任何操作,那么退出是一种有效策略。

    69040

    C++-带你深度理解string常见接口

    C语言中,字符串是以'\0'结尾一些字符集合,为了操作方便,C标准库中提供了一些str系列库函数,但是这些库函数与字符串是分离开,不太符合OOP思想,而且底层空间需要用户自己管理,稍不留神可...在OJ中,有关字符题目基本以string形式出现,而且在常规工作中,为了简单、方便、快捷,基本 都使用string类,很少有人去使用C库中字符串操作函数。 2....标准字符串类提供了对此类对象支持,其接口类似于标准字符容器接口,添加了专门用于操作 单字节字符字符设计特性。...总结: 1. string是表示字符字符串类 2. 该类接口与常规容器接口基本相同,再添加了一些专门用来操作string常规操作。...2.2.4.20substr substr就是从pos位置开始读出长度为len字符串,返回string类。 今天分享到这里就结束了,感谢大家阅读!

    12810

    python中string操作函数

    在最开始时候,python有一个专门stringmodule,要使用string方法要先import,后来由于众多python使用者建议,从python2.0开始, string方法改为用...对一个字符串对象,首先想到操作可能就是计算它有多少个字符组成,很容易想到用S.len(),这是错,应该是len(S)。因为len()是内置函数,包括在__builtin__模块中。...python不把len()包含在string类型中,乍看起来好像有点不可理解,其实一切有其合理逻辑在里头。...这是替换通用形式,还有一些函数进行特殊字符替换 S.strip([chars]) #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None S.lstrip(...[chars]) S.rstrip([chars]) S.expandtabs([tabsize]) #把S中tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个 字符分割和组合

    92020

    HTTP协议

    说明一下:一般格式中带方括号为可选项urlencode和urldecodeurl中不乏有/ ? :等这样字符,而这些字符在url中被解释为特殊含义。...urlencode:对字符串中除了 -_. 之外所有非字母数字字符都将被替换成百分号(%)后跟两位 十六进制数,空格则编码为加号(+),形式为%XY。urldecode:对参数值进行编码。...if(pos==std::string::npos) { return ""; } std::string outbuffer=inbuffer.substr(0,pos...url是以提交表单获取资源方式存在。提交表单内容在方法单独一行存在。因此可以知道POST方法并不会呈现表单内容給用户看,相比于GET方法多了一些隐蔽性。...例如浏览器向服务器发送了三次请求,当前请求无法得知一次请求了什么,也无法得知下一次会请求到什么,即HTTP协议不做状态记录。

    36520

    【C++】深度解析:用 C++ 模拟实现 string 类,探索其底层实现细节

    ⭐了解string类 1. 字符串是表示字符序列类 2. 标准字符串类提供了对此类对象支持,其接口类似于标准字符容器接口,添加了专门用于操作单字节字符字符设计特性。...总结: 1. string 是表示字符字符串类 2. 该类接口与常规容器接口基本相同,再添加了一些专门用来操作 string 常规操作。...由于存在const对象和非const对象,所以需要写两个重载版本。...为了防止频繁扩容,我们可以创建一个可以存储128字节数组,作为缓冲,如果数组满了,则将这个字符数组追加到s,如果没慢,但是遇到空格或者换行了也需要追加。...另外由于C++标准输入流默认把空格和换行当作分隔符,不读取,所以这里要用in.get()来接收字符。 ✨getline 基本可以直接复用流提取代码。

    10600

    brpc小课堂:从StringPiece说开来

    答案是肯定,因为有时候尽管我们需要字符串中一段数据,并不需要潜在字符串拷贝。最常见例子就是字符串拆分时候。...C++没有其他语言一样提供官方std::stringsplit()函数,为此各种实现五花八门。...当然普通std::string构造函数也支持传入另外一个std::string并指定其起始位置和长度,但是std::string做法是将原字符这一小段字符串拷贝到自己堆存储中来,后面就和原字符串没有瓜葛了...需要这里是data()返回就是持有的字符指针,这段数据中间也可能是存在\0,比如size()是10,但是在第5个字符处是\0,这也是完全有可能。...也就是无法通过[]来修改原类型。其二就是std::string返回都是引用(const版本是const引用),而StringPiece返回值类型。

    1.1K20

    ​C++ STL 探索:String使用与理解

    在OJ中,有关字符题目基本以string形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中字符串操作函数。...string文档介绍: string表示字符串类,字符串表示字符序列类 该类接口与常规容器接口基本相同,再添加了一些专门用来操作string常规操作 string在底层实际为basic_string...由于经常性出现频繁插入字符清空,只存在size情况下,会导致频繁地向系统申请空间,性能降低。...兼容性与集成:std::string:与C++标准库和STL容器无缝集成,能够更好地与其他C++标准库组件协同工作。...C-string:虽然与C标准库函数兼容,与C++标准库组件结合不如 std::string 方便。

    11420

    官宣 Rust 2021 Edition 计划 一睹为快

    但是,有时候在 Rust 语法层面中进行一些更改,版次是有用,否则这些更改将无法向后兼容。最明显例子是引入一个新关键字,它会使变量等现有名称无效。...for &e in &[1, 2, 3] {} // Ok :) for e in [1, 2, 3] {} // Error :( 这是一个长期存在问题,但是解决方案并不像看起来那样简单。...()一样,它将始终将第一个参数作为格式字符串处理。 另外,Rust 2021 中core::panic!()和std::panic!()相同。当前,这两者之间存在一些历史差异,当打开或关闭#!...只需插入一个空格:hello "world"。 除了将它们转换为标记化错误外,RFC 尚未将含义附加到任何前缀。为特定前缀分配含义留给将来建议,由于现在保留了这些前缀,因此不会破坏更改。...这些是您将来可能会看到一些新前缀: f""是格式字符简写形式。例如,f"hello {name}"是等效format_args!()调用简写形式。 c""或z""用于以N结尾C字符串。

    2.1K40

    每日算法刷题Day9-字符串移位包含问题、字符串乘方

    输入格式 共一行,包含两个字符串,中间由单个空格隔开。 字符串只包含字母和数字,长度不超过 30。...> using namespace std; int main() { string a,b; cin >>a>>b; if(a.size()<b.size())swap...每组样例包含一个字符串 s,s 长度不超过 100。 最后测试样例后面将是一个点号作为一行。 输出格式 对于每一个 s,你需要输出最大 n,使得存在一个字符串 a,让 s=an。...代码 需要注意点在于string r定义位置,如果定义为全局变量,由于没有清零机制,会导致r不停累加,最后反而无法匹配了。因此string应定义在循环内。...#include using namespace std; int main() { string str; while(cin >> str

    1K10

    c++字符串与c字符

    字符串中最后一个字符是空字符(\0’) C++包含一些来自C语言字符串操作函数,它们在头文件中定义。 ...与字符串字面量关联真正内存在内存只读部分中。通过这种方式,编译器可 以重用等价字符串字面量引用,来优化内存使用。...在C++中,std::string是一个类(实际是basic string模板类一个实例),这个类支持 <cstring >中提 供许多功能,还能自动管理内存分配。...事实,把string想象为 简单类型更容易发挥string作用。通过运算符重载神奇作用,C++string使用起来比C字符串容易得多。 ...  转十进制可以用to_string,但是低版本编译器可能不支持  转多进制可以用_itoa_s,似乎没有安全机制,导致无法捕获异常      char cstr[20];     _itoa_s

    1.4K30
    领券