我正在尝试解决一个问题,我需要找到第i个"字符串"的位置。在主字符串中。
离。 : bearacbear,我需要找到第二个"熊"的位置。 (不使用substr)
这是我当前的解决方案(包含substr的错误,这就是为什么我问是否有更好的方法)
#include <iostream>
#include <algorithm>
#include <iterator>
#include <assert.h>
#include <cmath>
#include <sstream>
#include <iomanip>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <ctime>
#define ull unsigned long long // for n^12
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
string str;
cin >> str;
ll ans = 0, len;
for (int i = 0; i < str.size() - 2; i++)
{
string s = str.substr(i, str.size());
len = s.size();
int pos = s.find("bear") + str.size() - s.size();
if (s.find("bear") != string::npos)
ans += (len - pos - 3);
}
cout << ans;
system("pause");
}
答案 0 :(得分:0)
该功能可以按以下方式查看
#include <iostream>
#include <string>
std::string::size_type find_nth( const std::string &s1, const std::string &s2,
std::string::size_type n = 1 )
{
std::string::size_type length = 0;
std::string::size_type i = 0;
std::string::size_type pos = 0;
while ( i < n && ( pos = s1.find( s2, pos + length ) ) != std::string::npos )
{
++i;
length = s2.size();
}
return i == n && n ? pos : std::string::npos;
}
int main()
{
std::string s( "bearacbear" );
std::string::size_type n = find_nth( s, "bear", 2 );
if ( n != std::string::npos ) std::cout << s.c_str() + n << std::endl;
}
程序输出
bear