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

为什么std:string在比较相同文本的子字符串时不返回0?

std::string在比较相同文本的子字符串时不返回0的原因是因为std::string的比较操作符是基于字符序列的比较,而不是基于子字符串的比较。

当我们使用std::string的比较操作符(如==、!=、<、>、<=、>=)来比较两个字符串时,它会按照字符的顺序逐个比较字符。如果两个字符串的字符序列完全相同,则返回0,表示两个字符串相等。但是,当我们比较两个字符串的子字符串时,比较操作符会从子字符串的起始位置开始逐个比较字符,直到找到不相等的字符或者到达其中一个字符串的末尾。

因此,如果我们比较的是相同文本的子字符串,由于子字符串的起始位置不同,比较操作符会在不同的位置找到第一个不相等的字符,从而返回一个非零值,表示两个子字符串不相等。

举个例子,假设我们有一个std::string对象str,它的值为"Hello, World!",我们想比较子字符串"Hello"和"Hello"。如果我们使用str.compare()函数来比较这两个子字符串,它会返回一个非零值,因为比较操作符会从子字符串的起始位置开始比较字符,而起始位置不同。

如果我们想比较两个子字符串是否相等,可以使用std::string的substr()函数来获取子字符串,然后再进行比较。例如:

代码语言:txt
复制
std::string str = "Hello, World!";
std::string subStr1 = str.substr(0, 5); // 获取子字符串"Hello"
std::string subStr2 = str.substr(7, 5); // 获取子字符串"World"

if (subStr1 == subStr2) {
    // 子字符串相等
} else {
    // 子字符串不相等
}

在腾讯云的产品中,与std::string相关的产品可能是与字符串处理、文本分析等相关的产品,例如腾讯云的自然语言处理(NLP)服务,可以用于文本分析、情感分析、关键词提取等任务。具体产品信息和介绍可以参考腾讯云自然语言处理(NLP)服务的官方文档:腾讯云自然语言处理(NLP)

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

相关·内容

算法:字符串

i是该字符字符串位置; 字符串长度:字符串中字符数目n成为字符串长度; 空串:零个字符构成串也称为「空字符串」,它长度为0,可以用''表示; 串:字符串中任意个连续字符组成序列称为该字符串...可以简单理解为,给定字符串 T 和 p,主串 T 中寻找串 p。主 串 T 又被称为 「文本串」 ,串 p 又被称为 「模式串」 。字符串问题中,最重要问题之一就是字符串匹配问题。...基于串搜索方法:搜索窗口内从后向前(沿着文本反向)逐个读入文本字符,搜索满足「既 是窗口中文本后缀,也是模式串串」最长字符串。...可以推出:文本后k位后缓和模式串前k位是相同,即 T[i+m-k: i+m] == p[0:k] ,不需要再比较了,可以直接跳过。...std::stack> st; // 使用pair存储一块数字和一块字符串 int count = 0; std:

2.7K30

【数据结构】模式匹配之KMP算法与Bug日志—CC++实现

模式匹配基本概念 1.1 模式匹配是字符串 s (称为目标串)中寻找字符串 t (称为模式串)过程。 目标串: 这是要进行搜索字符串,包含了我们需要查找模式信息。...模式串: 这是要在文本串中寻找具体字符串字符串。...示例:目标串s="aaaaab",模式串t="aaab". 1.2 常见模式匹配算法: 暴力匹配(BF)算法: 从文本第一个字符开始,逐一与模式串比较,如果匹配,则移动到下一个位置。...算法核心是匹配失败能够利用已匹配信息,避免重复比较。...匹配过程: 匹配过程中,通过部分匹配表信息来实现跳过一定比较

9410

重学KMP!

给定一个 haystack 字符串和一个 needle 字符串 haystack 字符串中找出 needle 字符串出现第一个位置 (从0开始)。如果不存在,则返回 -1。...这是一个面试中很好问题。对于本题而言,当 needle 是空字符串我们应当返回 0 。这与C语言 strstr() 以及 Java indexOf() 定义相符。...KMP经典思想是:当出现字符串匹配,可以记录一部分之前已经匹配文本内容,利用这些信息避免从头再去做匹配。...长度为前1个字符串a,最长相同前后缀长度为0。(注意字符串前缀是指包含最后一个字符所有以第一个字符开头连续串;后缀是指包含第一个字符所有以最后一个字符结尾连续串。) ?...本题要在文本字符串中找出模式串出现第一个位置 (从0开始),所以返回当前文本串匹配模式串位置i 减去 模式串长度,就是文本字符串中出现模式串第一个位置。

44620

leetcode 28. 实现 strStr()----KMP算法,朴素模式匹配算法----超万字长文详解

return i; } } return -1; } }; 注意:compare返回字符串相等返回0 大于返回正数 小于返回负数 compare函数六种重载形式: s2...同时每一次匹配失败,去检查已匹配部分相同「前缀」和「后缀」,跳转到相应位置,如果匹配则再检查前面部分是否有相同「前缀」和「后缀」,再跳转到相应位置 … 这部分复杂度是 O(m^2),因此整体复杂度是...下标5之前这部分字符串(也就是字符串aabaa)最长相等前缀 和 后缀字符串字符串aa ,因为找到了最长相等前缀和后缀,匹配失败位置是后缀后面,那么我们找到与其相同前缀后面从新匹配就可以了...(注意字符串前缀是指包含最后一个字符所有以第一个字符开头连续串;后缀是指包含第一个字符所有以最后一个字符结尾连续串。)...本题要在文本字符串中找出模式串出现第一个位置 (从0开始),所以返回当前文本串匹配模式串位置i 减去 模式串长度,就是文本字符串中出现模式串第一个位置。

57640

零基础入门C语言超详细字符串详解

返回一个整数值, 指定在string中全部由characters中字符组成长度. 如果string以一个包含在strCharSet中字符开头, 函数将返回0值.   ...返回一个指针, 指向strCharSet中任一字符string中首次出现位置. 如果两个字符串参数不含相同字符, 则返回NULL值.   ...返回值< 0, 表示string1串小于string2串;   返回值为0, 表示string1串等于string2串;   返回值> 0, 表示string1串大于string2串...与strncmp不同是, 比较是它们小写字母版本. 返回值与strncmp相同.   ...  (basic_string::size_type)(-1);   查找字符串等操作,函数返回 npos 值表示非法索引。

1K20

C++ <cstring>字符串库函数自定义实现

std::basic_string提供了大量字符串操作函数,如比较、连接、搜索、替换、获得串等。...:append–追加字符或字符串 string::operator+=–追加,只有一个参数——字符指针、字符或字符串;不像 append() 一样可以追加参数串或若干相同string::copy...根据比较结束第一个字符(字节)数组中字符(字节)是小于、等于或大于第二个字符(字节)数组中字符(字节)而返回-1,0或1。...否则,strcmp遇到空字符停止比较,memcmp不关心空字符,比较字节数达到n个停止比较,strncmp结合了上述两个函数特点,达到n个字符或遇到空字符停止比较。...strlen返回字符串长度,不包括字符串末尾空字符。strerror当输入存储errno错误码,会返回一个指向描述这种错误字符串指针。

1.1K40

C++教程(凯格尔训练法教程)

字符数组中最后一位为’\0’),可以看成字符串。...s1,s2 s1>s2返回1 相等返回1,否则返回-1 strlen(char s[]);//计算字符串s长度 字符串s实际长度,不包括\0在内 10.2 C++中字符串(string) 字符串定义和初始化...const;//在当前字符串pos索引位置开始,查找串s,返回找到位置索引,-1表示查找不到串 size_t find (charc, size_t pos = 0) const;//在当前字符串...pos = npos) const;//在当前字符串pos索引位置开始,查找最后一个位于串s字符,返回找到位置索引,-1表示查找不到串 sort(s.begin(),s.end()); substr... Windows 平台中,如果以文本方式打开文件,当读取文件,系统会将文件中所有的\r\n转换成一个字符\n,如果文件中有连续两个字节是 0x0d0a,则系统会丢弃前面的 0x0d 这个字节,只读入

2.9K20

字符串:都来看看KMP看家本领!

给定一个 haystack 字符串和一个 needle 字符串 haystack 字符串中找出 needle 字符串出现第一个位置 (从0开始)。如果不存在,则返回 -1。...这是一个面试中很好问题。 对于本题而言,当 needle 是空字符串我们应当返回 0 。这与C语言 strstr() 以及 Java indexOf() 定义相符。...KMP经典思想就是:「当出现字符串匹配,可以记录一部分之前已经匹配文本内容,利用这些信息避免从头再去做匹配。」...next[j]就是记录着j(包括j)之前相同前后缀长度。 那么 s[i] 与 s[j+1] 不相同,就要找 j+1前一个元素next数组里值(就是next[j])。...本题要在文本字符串中找出模式串出现第一个位置 (从0开始),所以返回当前文本串匹配模式串位置i 减去 模式串长度,就是文本字符串中出现模式串第一个位置。

35910

C++教程(最全)「建议收藏」

字符数组中最后一位为’\0’),可以看成字符串。...s1,s2 s1>s2返回1 相等返回1,否则返回-1 strlen(char s[]);//计算字符串s长度 字符串s实际长度,不包括\0在内 10.2 C++中字符串(string) 字符串定义和初始化...const;//在当前字符串pos索引位置开始,查找串s,返回找到位置索引,-1表示查找不到串 size_t find (charc, size_t pos = 0) const;//在当前字符串...pos = npos) const;//在当前字符串pos索引位置开始,查找最后一个位于串s字符,返回找到位置索引,-1表示查找不到串 sort(s.begin(),s.end()); substr... Windows 平台中,如果以文本方式打开文件,当读取文件,系统会将文件中所有的\r\n转换成一个字符\n,如果文件中有连续两个字节是 0x0d0a,则系统会丢弃前面的 0x0d 这个字节,只读入

2.5K30

C语言字符串操作总结大全(超详细)

返回一个整数值, 指定在string中全部由characters中字符组成长度. 如果string以一个包含在strCharSet中字符开头, 函数将返回0值.   ...返回一个指针, 指向strCharSet中任一字符string中首次出现位置. 如果两个字符串参数不含相同字符, 则返回NULL值.   ...返回值< 0, 表示string1串小于string2串;   返回值为0, 表示string1串等于string2串;   返回值> 0, 表示string1串大于string2串...与strncmp不同是, 比较是它们小写字母版本. 返回值与strncmp相同.   ...  (basic_string::size_type)(-1);   查找字符串等操作,函数返回 npos 值表示非法索引。

2.6K20

C语言字符串操作总结大全(超详细)

返回一个整数值, 指定在string中全部由characters中字符组成长度. 如果string以一个包含在strCharSet中字符开头, 函数将返回0值.   ...返回一个指针, 指向strCharSet中任一字符string中首次出现位置. 如果两个字符串参数不含相同字符, 则返回NULL值.   ...返回值< 0, 表示string1串小于string2串;   返回值为0, 表示string1串等于string2串;   返回值> 0, 表示string1串大于string2串...与strncmp不同是, 比较是它们小写字母版本. 返回值与strncmp相同.   ...  (basic_string::size_type)(-1);   查找字符串等操作,函数返回 npos 值表示非法索引。

1.8K10

brpc小课堂:从StringPiece说开来

截取返回string对象 从StringPiece到string_view 备胎转正 API差异 如果你没有C++14/17 序言 brpc源码src目录下,有一级子目录名为butil。...需要这里是data()返回就是持有的字符串指针,这段数据中间也可能是存在\0,比如size()是10,但是第5个字符处是\0,这也是完全有可能。...比std::string多两个函数:front_or_0()和back_or_0(),他们是当字符串长度为0时候,返回一个'\0'字符。...有了这两个函数以后,那剩下 !=、>、>=、<= 就能能实现了。这里赘述了。这一部分可以看出StringPiece进行比较时候并没有什么新意。...并且还能指定查找起始位置。然后返回查询到位置。接口定义和std::string中是相同

99220

华为2017校招C++岗笔试题

1.2问题求解 这个比较简单,给出如下参考代码: #include using namespace std; void deleteCharacter(string& str0,string...,就是比较繁琐,主要考察数据表示,字符串提取与排序,下面给出参考代码: #include #include #include #include...增加和删除位置可以A串中任意位置; (2)每一次删除和增加都需要额外代价,因此,对同一段字符,应该使用贪心思想,尽可能连续删除和连续增加; (3)A串和B串相同首尾串是不需要考虑...除去相同首尾串,得到串A’和B’,将A’变为B’,因为此时A’首尾字符与B’首尾字符是不相同,所以,对A’此时操作有两种: (1)对A’从左起和右起使用贪心思想删除连续字符;...这里为什么不考虑从A中间部分开始插入和删除,是因为这样做的话,A’首尾位字符与B’首尾字符还是不相同,还是需要进行删除或者增加操作,很明显这样不是最优,所以抛弃这种做法。

1.5K11

c++ string_view

当数据占用内存较大,减少数据拷贝可以有效提高程序性能。C中指针是完成这一目的标准数据结构,而C++引入了安全性更高引用类型。...substr O(n)复杂度 这是一个特别常用函数,好在std::string提供了这个函数,美中不足是其每次都返回一个新生成串,很容易引起性能热点。...实际上我们本意并不是要改变原字符串为什么不在原字符串基础上返回呢? C++17中引入了string_view,能很好解决以上两个问题。...::string &类型接收待分割字符串,若我们传入指向较大内存字符指针,会影响程序效率。...好在这块内存空间有合法字符串结尾符,如果str指向是一个没有\0字符数组,程序很有可能会出现内存问题,所以我们string_view类型数据传入接收字符串函数要非常小心。

32220

C语言和C++中字符串(string)

()  返回错误码对应文本信息  strlen()  返回指定字符串长度  strncat()  连接某一长度两个字符串  strncmp()  比较某一长度两个字符串  strncpy() ...append()字符串末尾添加文本assign()为字符串赋新值at()按给定索引值返回字符begin()返回一个迭代器,指向第一个字符c_str()将字符串以C字符数组形式返回capacity(...和length引用自己比较自己串和str串,其中str串以索引0开始,长度为length2,自己串以index开始,长度为length   (5)copy()  ->  拷贝    语法...如果没找到就返回string::nops字符串中查找第一个与ch匹配字符,返回位置。搜索从index开始。...搜索从index开始,最多查找num个字符如果没找到就返回string::nops字符串中查找最后一个与ch匹配字符,返回位置。搜索从index开始。

2.2K10

stringstring.h和ctring学习小结

另外,因为string类是c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++标准库,...string类型变量如果要转换成char*类型字符串string类中提供了三个方法 如下: const charT* c_str() const //c_str 直接返回一个以/0结尾字符串。...注意:c_str()返回类型是指向常量charT类型指针,说明指针所指空间内容 允许修改,只可以读取不可以更改。...strMobileName_temp.GetLength()+1)); errno_t err; err = _wcsupr_s(lpsz,strMobileName_temp.GetLength()+1);//因为没有找到区分大小写查找字符串函...->string /*c_str()和data()区别是:前者返回带'/0'字符串,后者则返回不带'/0'字符串*/ 2.CString和int转换 inti=123; CStringstr; str.format

1K20
领券