Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Функции insert()

#cpp


Вводятся две строки, необходимо в первой строке найти вторую и заключить ее в скобки.
"s3.insert(1,s2)" без этой команды программа работает, с этой командой программа зависает.
Подскажите в чем проблема. 

#include 
#include 
#include 
#include 

using namespace std;

int main(){
    setlocale(LC_ALL,"");
    string s1,s2,s3;
    cout<<"Введите первую строку: ";
    cin>>s1;
    cout<<"Введите вторую строку: ";
    cin>>s2;
    s3="()";
    s3.insert(1,s2);

    int size = s2.size();

    int x = s1.find (s2);
    while (x


Ответы

Ответ 1



Если нужно найти все вхождения строки s2 в s1, то цикл здесь нужен. Проблема в том, что следующее вхождение нужно искать не с начала строки, как вы это делали здесь: x = s1.find (s2); а с определённого индекса, то есть (предыдущий x + длина найденной строки) x = s1.find(s2, x + s3.size()); Итого: int x = s1.find(s2); while (x != string::npos) { s1.replace(x, size, s3); x = s1.find(s2, x + s3.size()); }

Ответ 2



Например, такая функция вернет вам то что нужно: string& enclose(string& s1, const string& s2, const char ch1 = '(', const char ch2 = ')') { size_t first = s1.find(s2); if (first != string::npos) { auto p = s1.insert(s1.begin() + first, ch1); s1.insert(p + s2.size() + 1, ch2); } return s1; } Нет необходимости в дополнительном обьекте....

Ответ 3



Через метод find находим позицию начала строки s2 в строке s1. Если find не вернул std::string::npos, значит подстрока найдена, вставляем скобки методом insert. #include #include int main(){ std::string s1,s2; std::cout << "first string: "; std::cin >> s1; std::cout << "second string: "; std::cin >> s2; int pos = s1.find(s2); if(pos != std::string::npos) { s1.insert(pos, "("); s1.insert(pos+s2.length()+1, ")"); std::cout << "Success!" << std::endl; } else std::cout << "Substring not found!" << std::endl; std::cout << s1 << std::endl; return 0; } first string: foobar second string: bar Sucess! foo(bar)

Ответ 4



Ну так а что вы делаете сдесь: int x = s1.find (s2); while (x

Ответ 5



int x = s1.find (s2); while (x # include int main(){ std::string s1("abc"); std::string s2("a"); int size = s2.size(); std::string s3("aa"); int x = std::string::npos ; if (x == -1) std::cout<<"std::string::npos == -1"<

Комментариев нет:

Отправить комментарий