В чем отличия между кодами?

Почему первый и второй код дают разный результат:
#include <bits/stdc++.h>
using namespace std;
int occ(string src, string sub)
{
    int j = 0, p = 0;
    while ((p = src.find(sub, p)) != src.npos ) {
        ++j;
        ++p;
    }
    return j;
}
main()
{
    string s;
    cin >> s;
    int l, r;
    cin >> l >> r;
    string res = s.assign(s, l-1, r-l+1);
    int col = occ(s, res);
    cout << col;
}

Тут l = 2, r = 2, и по логике res = "a";

Но тут почему то выводит 1. А в нижнем коде всё работает правильно:
#include <bits/stdc++.h>
using namespace std;
int occ(string src, string sub)
{
    int j = 0, p = 0;
    while ((p = src.find(sub, p)) != src.npos ) {
        ++j;
        ++p;
    }
    return j;
}
main()
{
    string s;
    cin >> s;
    int l, r;
    cin >> l >> r;
    string res = "a";
    int col = occ(s, res);
    cout << col;
}


На вход подаётся:
s = "aabbbaabba"
l = 2
r = 2
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
assign делает совсем не то, что вы думаете. Оно заменяет строку s на подстроку.

Вам надо использовать s.substr.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы