Insert c что это
Здравствуйте. Пожалуйста, покажите мне простой пример программы, которая вставляет строку в строку в заданное место с помощью метода insert. Чтобы были функции и символьные строки, в общем, чтобы была часть не только main, но и объявления до main =) Простите, что говорю таким нелепым языком) Еще не очень ориентируюсь в C++)
| GexogenSG1 |
| Посмотреть профиль |
| Найти ещё сообщения от GexogenSG1 |
Регистрация: 16.12.2011
Сообщений: 2,329
Форумчанин
Регистрация: 07.04.2012
Сообщений: 216
// inserting into a string #include #include int main () < std::string str="to be question"; std::string str2="the "; std::string str3="or not to be"; std::string::iterator it; // used in the same order as described above: str.insert(6,str2); // to be (the )question str.insert(6,str3,3,4); // to be (not )the question str.insert(10,"that is cool",8); // to be not (that is )the question str.insert(10,"to be "); // to be not (to be )that is the question str.insert(15,1,':'); // to be not to be(:) that is the question it = str.insert(str.begin()+5,','); // to be(,) not to be: that is the question str.insert (str.end(),3,'.'); // to be, not to be: that is the question(. ) str.insert (it+2,str3.begin(),str3.begin()+3); // (or ) std::cout
| RussDragon |
| Посмотреть профиль |
| Найти ещё сообщения от RussDragon |
Пользователь
Регистрация: 16.06.2013
Сообщений: 18
нет, такой не пойдет. До main нет объявления функции символьных строк. Нет возможности указать место в строке, куда вставляется другая строка. Необходимо именно две строки, и именно одну вставлять в другую и в именно мною указываемое место (по номеру символа, наверное).
| GexogenSG1 |
| Посмотреть профиль |
| Найти ещё сообщения от GexogenSG1 |
Пользователь
Регистрация: 16.06.2013
Сообщений: 18
и нужен самый простой вариант, а это, я так понимаю, не самый простой вариант. И такая программа легко ищется в гугле, я уже видел ее.
| GexogenSG1 |
| Посмотреть профиль |
| Найти ещё сообщения от GexogenSG1 |
Форумчанин
Регистрация: 07.04.2012
Сообщений: 216
Я вас не понимаю. str.insert(6,str2); — вставляем строку str2 с 6 символа. str2 может быть и строкой типа "String for example".
Последний раз редактировалось RussDragon; 22.06.2013 в 20:34 .
| RussDragon |
| Посмотреть профиль |
| Найти ещё сообщения от RussDragon |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,182
"нет, такой не пойдет." - почему?
"До main нет объявления функции символьных строк." - какой функции?
"Нет возможности указать место в строке, куда вставляется другая строка." - есть возможность.
"Необходимо именно две строки, и именно одну вставлять в другую и в именно мною указываемое место (по номеру символа, наверное)." - все так и есть.
"нужен самый простой вариант, а это, я так понимаю, не самый простой вариант" - это самый простой.
"И такая программа легко ищется в гугле, я уже видел ее." - так что же теперь каждый раз писать уникальный код?
Пишите язык программирования - это форум программистов , а не экстрасенсов. (<= это подпись ) Пользователь Регистрация: 16.06.2013 Сообщений: 18
Я понимаю, что вы меня не понимаете. Но вы понимаете, что мне нужно, чтобы я сам указывал куда вставить строку. Чтобы мне на экране в консоли выводился диалог, с 1 строкой и со второй строкой и чтобы указав номер символа первой строки, строка вставлялась именно после этого символа.
И нужно, чтобы не тупо тело программы было, а еще объявления функций (то есть то, что до сегмента main написано. Вы вообще не прочитали моих предыдущих постов.
| GexogenSG1 |
| Посмотреть профиль |
| Найти ещё сообщения от GexogenSG1 |
Как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1)?
Есть конфигурация роутера, надо расписать что значит каждая строка
Помогите! есть конфигурация роутера, надо расписать что значит каждая стройка, и команды которыми.

Что выполняет эта строка: res.insert?
res.insert(res.begin(), ((Number >> i) & 0x01) + 48); Добавлено через 53 секунды мне не понятны.
Что есть что в задании? (что есть скрипт, а что - запрос, внутри)
"Создать модель сущность-связь. Написать скрипт создания таблицы в соответствии с этой моделью.
Регистрация: 12.11.2013
Сообщений: 11

Сообщение было отмечено xdffgdg как решение
Решение
Думаю, из этого примера всё должно быть понятно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// inserting into a string #include #include int main () { std::string str="to be question"; std::string str2="the "; std::string str3="or not to be"; std::string::iterator it; // used in the same order as described above: str.insert(6,str2); // to be (the )question str.insert(6,str3,3,4); // to be (not )the question str.insert(10,"that is cool",8); // to be not (that is )the question str.insert(10,"to be "); // to be not (to be )that is the question str.insert(15,1,':'); // to be not to be(:) that is the question it = str.insert(str.begin()+5,','); // to be(,) not to be: that is the question str.insert (str.end(),3,'.'); // to be, not to be: that is the question(. ) str.insert (it+2,str3.begin(),str3.begin()+3); // (or ) std::cout str '\n'; return 0; }
Вектора в С++ часть 5 (функции insert(), swap(), shrink_to_fit())
Вектора, позволяют помещать число в любую ячейку вектора (даже если эта ячейка уже занята), пример для понимания:
#include #include using namespace std; int main() < vector vecInt(3,100); ///Создаем вектор из 3 элементов и заполняем его значением 100 vector ::iterator it; it = vecInt.begin(); ///Итератор указывает на vec[0] ///Вектор расширяется теперь до 4 элементов vecInt.insert (it,200); ///И первым элементом записывается 200 ///Вектор расширяется теперь до 5 элементов it = vecInt.begin() + 3;///Вектор указывает на 4 элемент (0-элемент+3-элемента) vecInt.insert(it,300);///И четвертым элементом записывается 300 vecInt.insert(it+1,900);///Вектор расширяется теперь до 6 элементов и 5 элементом записывается 900 cout cout
Работа нашей программы:
CppStudio.com
Vector contains: 200 100 100 300 900 100
Vector max_size: 1073741823
Vector size: 6 New vector size: 10
В 6 строке объявлен вектор размером из трех элементов типа int и сразу же заполнили его числом 100. В строке 7 мы объявляем итератор it , в 8 строке наш итератор указывает на нулевой элемент нашего вектора. В 11 строке мы встречаем новую функцию vector::insert() .
Функция vector::insert() принимает два аргумента (первый – указатель на ячейку вектора, куда будет помещено число, второй – само помещаемое число). Так как итератор it указывает на vecInt[0] , нулевой элемент вектора, то теперь vecInt[0]=200 . Длина вектора соответственно увеличивается на один элемент. В строке 14 итератор it теперь указывает на третий элемент вектора, т. е. vecInt[3] , соответственно назначение строки 15 становиться уже понятно.
В строке 16 число 900 мы записываем в позицию it+1 или vecInt[3+1] . В строках с 19-22 осуществляется вывод вектора, но это должно быть уже Вам понятно. В строке 24 используется функция vector::max_size() , которая выводит максимальный размер вектора, т. е. максимально возможное количество, элементов которое может вместить в себя вектор. В строке 26 встречается новая функция vector::resize () , функция позволяет увеличить размер вектора до заданной величины, в данном случае вектор расширяется до 10 элементов.
Если функция vector::resize() позволяет уменьшить размер вектора, то функция vector::reserve( ) имеет обратное действие, она позволяет расширить вектор до заданной величины, рассмотрим пример:
#include #include using namespace std; int main() < vector vecFirst ,vecSecond; /// Создаем два вектора for ( int i=0; i cout << "vecFirst contains: "; for (int i=0; i
Функции insert()
Вводятся две строки, необходимо в первой строке найти вторую и заключить ее в скобки. "s3.insert(1,s2)" без этой команды программа работает, с этой командой программа зависает. Подскажите в чем проблема.
#include #include #include #include using namespace std; int main()< setlocale(LC_ALL,""); string s1,s2,s3; cout>s1; cout>s2; s3="()"; s3.insert(1,s2); int size = s2.size(); int x = s1.find (s2); while (xcout
Отслеживать
задан 5 июл 2018 в 8:26
43 4 4 бронзовых знака
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Если нужно найти все вхождения строки s2 в s1, то цикл здесь нужен. Проблема в том, что следующее вхождение нужно искать не с начала строки, как вы это делали здесь:
а с определённого индекса, то есть (предыдущий x + длина найденной строки)
x = s1.find(s2, x + s3.size());
int x = s1.find(s2); while (x != string::npos)
Отслеживать
ответ дан 5 июл 2018 в 9:12
Влада Мамутова Влада Мамутова
76 6 6 бронзовых знаков
Например, такая функция вернет вам то что нужно:
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; >
Нет необходимости в дополнительном обьекте.
Отслеживать
ответ дан 5 июл 2018 в 8:53
AR Hovsepyan AR Hovsepyan
15.9k 3 3 золотых знака 13 13 серебряных знаков 30 30 бронзовых знаков
а если нет включения искомой строки? Ваша функция содержит серьезную ошибку
5 июл 2018 в 9:06
К тому же не думаю, что разумно использовать целочисленный тип для возвращаемого значения функции, которая использует отрицательное значение для сигнала об ошибке.
5 июл 2018 в 9:08
@Andrej Levkovitch, нетрудно найти во многих ответах неучтенные деталии и ставить минусы. А разве это делу поможет.
5 июл 2018 в 9:21
я поставил минус потому что в вашем ответе (была) не "неучтенный минус" - а серьезная ошибка, разве нет? Вы с этим не согласны? Но в любом случае, так как ошибка исправлена, мой минус я аннулирую
5 июл 2018 в 9:24
@Andrej Levkovitch, в таких случаях, для общего блага, любезно предупреждают об упущении. Но вы зря аннулировали минус, поскольку побольшому счету я должен был кинуть исключение, если строка не найдена, или как минимум, вывести сообщение на консоль.
5 июл 2018 в 9:32
Через метод find находим позицию начала строки s2 в строке s1. Если find не вернул std::string::npos , значит подстрока найдена, вставляем скобки методом insert .
#include #include int main()< std::string s1,s2; std::cout > s1; std::cout > s2; int pos = s1.find(s2); if(pos != std::string::npos) < s1.insert(pos, "("); s1.insert(pos+s2.length()+1, ")"); std::cout else std::cout
first string: foobar
second string: bar
Sucess!
foo(bar)
Отслеживать
ответ дан 5 июл 2018 в 9:12
Alexshev92 Alexshev92
3,125 6 6 золотых знаков 18 18 серебряных знаков 33 33 бронзовых знака
Ну так а что вы делаете сдесь:
int x = s1.find (s2); while (x
? У вас всегда условие в цикле будет верным!! Так как если искомая строка есть в s1 , то x , конечно, будет меньше size . А если нет, то x будет равен -1 , и тоже меньше чем size .
И зачем вам сдесь вообще цикл? Разве не достаточно простого if ?
int x = s1.find (s2); if (x != -1)
Так все работает.
Отслеживать
ответ дан 5 июл 2018 в 8:53
Andrej Levkovitch Andrej Levkovitch
8,027 2 2 золотых знака 19 19 серебряных знаков 45 45 бронзовых знаков
int x = s1.find (s2); while (x
при осутствии find возвращает std::string::npos == -1 , то есть в любом случае бесконечный цикл. Баг в алгоритме ещё, вы в переменной s1 не удаляете найденную строку, а делаете replace , при s1 == s2 будет опять зависон. Демонстрация этой проблемы:
# include # 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::coutif(not limit) std::cout
std::string::npos == -1 s1=aabc s1=aaabc s1=aaaabc s1=aaaaabc s1=aaaaaabc s1=aaaaaaabc s1=aaaaaaaabc s1=aaaaaaaaabc s1=aaaaaaaaaabc s1=aaaaaaaaaaabc Zavison!