Соединить две строки исключив наложение символов С++

нкжно немного подкорректировать код. Не могу разобраться как использовать фукции lenght, substr, erase не в том виде, в котором они используются (через точку), а в виде length() и т.д. (т.е. без точки), не понимаю какие аргументы в скобки подставлять, вообщем. Подскажите, пожалуйста. Условие задачи: Даны строки символов s и g. Соединить строку g справа к строке s. Если начало строки g совпадает с концом строки s, при соединении строк исключить такое наложение символов, удалив наибольшее их количество. Например: s: C++ is one of progr g: rogramming languages. Результующая строка: C++ is one of programming languages.

#include <iostream>
#include <string>
#include <conio.h>
#include <cstring>
using namespace std;

void fStrCut(const string s, string& g)
{
    int i, flg = 0;
    int lS = s.length();
    int lG = g.length();
    int minLen;

    if (lS > lG)
        minLen = lG;
    else
        minLen = lS;


    for (i = minLen - 1; i >= 0; i--)
    {
        string sSub = s.substr(lS - 1 - i, i + 1);
        string gSub = g.substr(0, i + 1);
        if (sSub == gSub)
        {
            flg = 1;
            g = s + g.erase(0, i + 1);
            break;
        }
    }
    if (flg == 0)
        g = s + g;
}
int main()
{
    //string s = "C++ is one of progr";
    //string g = "rogramming languages.";

    string s, g;
    cout << "Enter string s:" << endl;
    getline(cin, s);
    cout << "Enter string g:" << endl;
    getline(cin, g);

    fStrCut(s, g);
    cout << "String:" << endl << g << endl;
    return 0;
}

Ответы (1 шт):

Автор решения: AR Hovsepyan

Странные и не понятные ваши пожелания, по поводу не использования точки(для чего?), так как это функции_члены строкового объекта, и иначе их не вызвать. Но решение не сложна:

std::string unite(const std::string& s, const std::string& g)
{    
    size_t pos = s.find(g[0]);    
    std::string sub = s.substr(pos);
    while (pos != s.npos && sub != g.substr(0, s.length() - pos)) {
        pos = s.find(g[0], pos + 1);
        sub = s.substr(pos);
    }
    return s.substr(0, pos) + g;
}

int main() 
{     
    cout << unite("C++ is one of progr", "rogramming languages") ;
    return 0;
}

То есть сначала находите в первой строке первый символ второй строки. Если начиная с этой позиции оставшаяся строка не совпадает с подстрокой другой строки с таким же количеством символов, то выполняем то же самое начиная со следующего символа первой строки.

→ Ссылка