std::string::find 在 C++ 中未按预期工作

2023-12-21

我试图验证输入字符串中是否存在特定字符串,如果是,则根据找到的字符串执行某些操作;但似乎无论如何它总是在做第一个任务......

if (inputString.find(str1) >= 0)
{
   //do something
}
else if (inputString.find(str2) >= 0)
{
    // do something else
}
else 
{
    std::cout << "Strange" << std::endl;
}

它总是进入// do something阻止无论是否str1存在于inputString or not.

If I do

int str1pos = inputString.find(str1);
int str2pos = inputString.find(str2);
if (str1pos >= 0)
{
   //do something
}
else if (str2pos >= 0)
{
    // do something else
}
else 
{
    std::cout << "Strange" << std::endl;
}

似乎有效。这是为什么?我究竟做错了什么?


inputString.find(str1) >= 0总是正确的。

这是因为返回类型find http://www.cplusplus.com/reference/string/string/find/ is size_t http://www.cplusplus.com/reference/cstddef/size_t/这是一个unsigned整数类型,所以不能为负数。任何像样的编译器都会对此比较发出警告。

在第二个示例中,当您转换返回值时find to int, if findnpos http://www.cplusplus.com/string::npos,则该值变为-1。这就是为什么>= 0在那里工作。但如果find返回的值大于INT_MAX但不是npos,强制转换会将索引变为负值,并且您的逻辑将失败。

因此,您应该比较npos反而:

if (inputString.find(str1) != std::string::npos)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::string::find 在 C++ 中未按预期工作 的相关文章

随机推荐

  • Google 地图 iOS API 密钥不起作用

    我有一个简单的 iOS 应用程序 我正在其中集成 Google 地图 但是 当显示我的地图视图时 我提供的 API 密钥会导致出现以下几条错误消息 ClientParametersRequest failed 3 attempts rema
  • 在C++中设置本地环境变量

    如何在 C 中设置环境变量 他们不需要保留过去的程序执行 它们只需要在当前进程中可见 偏好与平台无关 但对于我的问题 只需要在 Win32 64 上工作 Thanks NAME putenv change or add an environ
  • 将多行合并为一行,多对多

    使用 SQL Server 我有以下表格 数据 CUS 访问 Cus ID Cus Vis ID 1 01 1 02 2 01 and CUS EVENT Cus Event ID Cus ID Cus Vis ID 001 1 01 00
  • 将巨大的 40000 页 pdf 拆分为单页,itextsharp,内存不足异常

    我收到了包含大量数据的巨大 PDF 文件 目前的 PDF 大小为 350 MB 大约有 40000 页 当然 如果能得到更小的 PDF 就好了 但这就是我现在必须处理的 我可以在 acrobat reader 中打开它 加载时会有一些延迟
  • jQuery 和伪元素

    我尝试动态更改 CSS 中定义的元素的位置 after 使用这个 function div after css top 20px 但这不起作用 有什么方法可以改变位置吗 你不能 内容创建者 after or before不是 DOM 的一部
  • 如何使用 docker-compose 而不是使用 docker 桥从 docker 容器连接到 localhost:9092

    我正在我的上运行 Kafka 服务器本地机器在端口 9092 上 我正在运行一项服务使用 docker compose 的 docker 容器需要向kafka服务器发送消息 我尝试使用 localhost 和 IP 在服务代码中编写我的生产
  • 如何生成表示 rrule 对象的人类可读字符串?

    我的应用程序允许用户定义对象的调度 并将它们存储为 rrule 我需要列出这些对象并显示类似 每日下午 4 30 的内容 有什么可用的东西可以 漂亮地格式化 rrule 实例吗 您只需提供一个 str 方法 每当需要将对象呈现为字符串时就会
  • SQLite 返回日期超过一周的记录

    我正在为图书库制作一个程序 在 sqlite 数据库中有一个图书表 其中包括该书上次取出的日期 我需要一个查询来显示过期的书籍 到目前为止我的代码如下 def findOverdueBooks event findRecords c exe
  • NuxtJS分布式静态页面生成

    有没有办法将静态页面生成过程拆分到多台机器上 我目前正在使用 NuxtJS 静态生成约 150k 页面 生成这些页面需要相当长的时间 约 1 小时 如果您已经在使用有效负载密钥 https nuxtjs org docs configura
  • 如何读取PHP中的注释块?

    我正在做一些自制的自动化文档 因为我有一个布局不是很标准的代码库 我想知道最好的方法是读取 PHP 文件并获取注释块的内容 我能想到的唯一方法是打开文件并逐行读取它 但我认为也许有一些内置的魔法可以为我解析文档 类似于反射函数 每个文件的基
  • Android:使用 1 个活动的主/详细流程(双窗格)

    据报道安卓指南 http developer android com guide practices tablets and handsets html 双面板可以通过两种方式实现 多个片段 one活动 多个片段 multiple活动 我正
  • 在 Visual Studio 2015 中使用 v90 (VS2008) 平台工具集

    是否可以 以及如何 使用 VS2015 IDE 使用编译器 链接器 STL 以及 VS2008 附带的所有其他内容来构建本机 C 项目 我想做的事情叫做 C 本机多目标 众所周知 例如VS2012 允许对 C 项目使用 VS2008 v90
  • 使用nodeValue从domelement打印html内容

    我有 html 格式的图像 我将其解析为 DOMDocument 并开始使用它 doc new DOMDocument doc gt loadHTML article header imgs doc gt getElementsByTagN
  • 如何制作Photoshop描边效果?

    我正在寻找一种以编程方式重新创建以下效果的方法 给出输入图像 输入http www shiny co il shooshx ConeCarv q input png http www shiny co il shooshx ConeCarv
  • asp net core app出现MSB3277怎么办

    我正在使用引用 EntityFrameworkCore 2 1 3 包的数据库项目 但 AspNetCore App metapackage 包含 EntityFrameworkCore 2 1 2 引入我的数据库项目后 我收到此 msbu
  • 如何使用 Networkx 包显示更好分离的网络?

    我使用创建了一个图形对象pytextrank像这样的包 import pytextrank Some steps and calculations graph ranks pytextrank text rank path stage1 我
  • 如何测试存储库中标记为@Modifying的方法?

    例如我有 public interface CrudUserRepository extends JpaRepository
  • 使用 Active Directory 集成身份验证向 Azure Sql 数据库添加具有特定权限的新用户

    我有一个带有两个数据库的 Azure SQL Server 我尝试对其使用 Azure Active Directory 集成身份验证 其中一个数据库至关重要 大多数用户只需要被授予对此数据库的 读 访问权限 要添加具有 读者角色 的新用户
  • WCF 客户端错误:“未指定安全令牌颁发者的地址”

    我从 WCF 客户端收到以下错误 未指定安全令牌颁发者的地址 必须在目标 http site com TLAPI svc 的绑定中指定显式颁发者地址 或者必须在凭据中配置本地颁发者地址 我正在尝试连接到 SharePoint 服务应用程序
  • std::string::find 在 C++ 中未按预期工作

    我试图验证输入字符串中是否存在特定字符串 如果是 则根据找到的字符串执行某些操作 但似乎无论如何它总是在做第一个任务 if inputString find str1 gt 0 do something else if inputStrin