首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查字符串的内容是否以另一个字符串的内容开始?

如何检查字符串的内容是否以另一个字符串的内容开始?
EN

Stack Overflow用户
提问于 2017-10-13 04:25:44
回答 4查看 54关注 0票数 0

我试图找出是否有一种方法来比较一个字符串的内容是否是另一个字符串的开始。例如,我想知道以字符串"c“开头的字符串的数量,该数组的内容是牛仔、空气、奶牛、猫。使用字符串库中的比较函数可以很好地工作。问题是,当我没有尝试使用"c",而是尝试使用"b“时,我得到了相同数量的答案。我不知道为什么,有人对如何解决这个问题有什么建议吗?这是我的两个版本。

代码语言:javascript
运行
复制
 #include <iostream>
 #include <string>
using namespace std;
 int main() {
// insert code here...
string A[4] = {"cowboy", "air", "c", "count"};
string b = "c";
int count = 0;

for(int i = 0; i < 4; i++)
{
    if(b.compare(A[i]) == 0 || b.compare(A[i]) == -1)
        count++;
}
cout << count << endl;
}

这个部分的输出是3,这是正确的。

代码语言:javascript
运行
复制
 #include <iostream>
 #include <string>
using namespace std;
 int main() {
// insert code here...
string A[4] = {"cowboy", "air", "c", "count"};
string b = "b";
int count = 0;

for(int i = 0; i < 4; i++)
{
    if(b.compare(A[i]) == 0 || b.compare(A[i]) == -1)
        count++;
}
cout << count << endl;
}

这部分的输出也是3,这是错误的。

任何帮助都是非常感谢的!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-13 04:41:38

compare函数存在过载,它接受位置和长度,并且只将字符串的一部分与另一个字符串进行比较。如果您以0作为位置,并且您正在搜索的字符串的大小作为长度,它将只比较字符串开头的那几个字符,而不是比较整个字符串。

代码语言:javascript
运行
复制
if(A[i].compare(0, b.size(), b) == 0)
    count++;

顺便说一下,您的第一个测试似乎有效的唯一原因是,您基本上是在检查"c“在字典上是否小于或等于您的目标字符串。既然“牛仔”、"c“和”计数“是这样的,而不是"air",那么你的结果是3。但是如果你添加了一个字符串,比如"direwolf”(按字典顺序排在"c“之后,而不是以"c”开头),你会发现你的结果并不是你所期望的那样。

票数 0
EN

Stack Overflow用户

发布于 2017-10-13 04:39:41

您可以尝试使用发现函数:

代码语言:javascript
运行
复制
string A[4] = {"cowboy", "air", "c", "count"};
string b = "b";
int count = 0;

for(int i = 0; i < 4; i++)
{
    auto found = A[i].find(b);
    if(found != string::npos && found == 0)
        count++;
}
cout << count << endl;

我在这里做的是在A[i]中找到A[i],如果我得到了npos --这意味着如果我找到了它就找不到了,我会通过检查found == 0来检查它是否在开始时

同样地,为了简化,如果我只想在开头检查一个字符匹配,我可以简单地A[i] == b[0]

现场演示

票数 0
EN

Stack Overflow用户

发布于 2017-10-13 04:56:03

将您的if条件替换为以下内容。这将字符串b与Ai的第一个字符进行比较。

代码语言:javascript
运行
复制
if(b.compare(0, A[i].length(), A[i], 0,  1) == 0)

在for循环中,当传入b = "c"时,第一个条件满足b.compare(A[i]) == 0,对于b="a",第二个条件满足。因此,在这两种情况下,你会看到3。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46722527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档