【问题标题】:cpp string find() doesnt work as expected - returns big junk valuescpp string find() 没有按预期工作 - 返回大垃圾值
【发布时间】:2016-02-24 10:47:02
【问题描述】:

我正在尝试使用 find() 在另一个字符串中查找子字符串的索引,但如果子字符串不存在,则会得到一个垃圾值而不是 std::npos。

这是代码:

字符串输出1 = "abcd";

cout

这是输出:

18446744073709551615

可以防止这种行为吗?还有其他方法可以找到子字符串吗?

(其实我只需要找到if子串是否包含)

谢谢

【问题讨论】:

    标签: c++ eclipse string find std


    【解决方案1】:

    它返回的是字符串的 npos 的size_t,因为它找不到您的字符或文本。你可以这样做:

    std::size_t found = str.find("findme");
    
    if (found != std::string::npos)
        std:cout << found << std::endl;
    else
        std::cout << "String not found" << std::endl // If not found
    

    【讨论】:

    • 条件为假,不显示输出 - 据我所知,npos 应为 -1,因此值不同
    • 是的,值是-1,但是当你使用std::cout打印它时,它会像你说的那样显示垃圾。如果要正确打印,请使用printf("%Iu", npos) (msvc) 或printf("%zu", npos) for gcc
    • 那么为什么条件会失败?
    • 是的,因为它找不到您的文本,所以它在if 内没有做任何事情。如果要添加未找到的输出,可以添加 else
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2012-04-12
    • 1970-01-01
    • 2013-05-17
    • 2017-10-19
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多