c++ - 函数 find() 工作不正确
问题描述
我的任务是检查一个数字是否包含8
。我已将数字转换为 astd::string
并使用了它的find()
方法。但它仅适用于以 开头的数字8
,例如8
,等。对于 , 等数字81
,它不起作用。881
18
28
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
unsigned long long g = 0;
int main()
{
string str;
cin >> str;
int f = stoi(str);
string eig = "8";
for (int a = 1; a <= f; a++)
{
string b = to_string(a);
if (b.find(eig) != size_t() && b.rfind(eig) != size_t())
{
cout << "It worked with " << b << "\n";
g++;
}
}
cout << g;
}
解决方案
您正在使用std::string::find()
并且std::string::rfind()
不正确。size_t()
如果未找到匹配项,它们不会返回。他们改为 返回std::string::npos
(即)。值为 0,因此如果根本没有找到匹配项 ( ),或者匹配第一个字符以外的任何字符 ( ),则评估为真。这不是你想要的。size_type(-1)
size_t()
find(...) != size_t()
-1 != 0
>0 != 0
此外,您的使用rfind()
是多余的,因为如果find()
找到匹配项,则rfind()
保证也会找到匹配项(尽管不一定是相同的匹配项,但您并不试图区分它)。
尝试这个:
#include <iostream>
#include <string>
using namespace std;
unsigned long long g = 0;
int main()
{
int f;
cin >> f;
for (int a = 1; a <= f; a++)
{
string b = to_string(a);
if (b.find('8') != string::npos)
{
cout << "It worked with " << b << "\n";
++g;
}
}
cout << g;
}
推荐阅读
- javascript - 如何在具有重复 ID 的 Bootstrap 选项卡窗格之间切换
- mysql - 添加全局 MySQL 异常处理程序
- java - 图形:您将如何在 JButton 打开的第二个 GUI 上绘制图形?
- pagespeed - 设置 Google pagespeed 洞察力以忽略 URL
- scala - 在 Spark 中将可选参数建模为 UDF 的最佳方法是什么?
- laravel - 语法错误,我的 laravel 代码中的文件意外结束
- javascript - 将巨大数组中的每个 JavaScript 对象与另一个对象合并
- python - 如何打印2条水平线
- angular - npm WARN deprecated core-js@2.6.11: core-js@<3 不再维护,由于问题数量不推荐使用
- windows - 卸载后在 Windows 功能中看不到 Internet explore