Форум программистов, компьютерный форум CyberForum.ru

STL и string - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод знака + или - http://www.cyberforum.ru/cpp-beginners/thread1198758.html
Здравствуйте есть код #include <iostream> using namespace std; int main() { int a1=0;
C++ Поиск одной переменной под другой Добрые день, сразу прошу извинить за неопределенное название темы!! Вопрос такой: человек вводит число 42.0 например, а под этим числом обьявлена переменная num7: float num5 = 43.5; char* numm5 = "Андрей"; float num6 = 42.1; char* numm6 = "Владимир"; float num7 = 42.0; http://www.cyberforum.ru/cpp-beginners/thread1198748.html
C++ Наследование классов, обратиться к замещающей функции
заголовочный файл #include <iostream> using namespace std; class X{ public: int x1,x2; X(int x_1, int x_2){ x1 = x_1;
Вывести на экран числа кратные 3 C++
Вывести на экран числа кратные 3. Числа вводим сами с экрана.
C++ Умножение всех элементов матрицы, равных 1, на заданное число (использовать while) http://www.cyberforum.ru/cpp-beginners/thread1198704.html
Помогите с решением задачи Составить программу которая производит умножение всех элементов двумерного массива равных 1 на заданное число. При формировании массива использовать оператор while
C++ Задача с бинарными файлами Реализовать программу, работающую с бинарным файлом f1, который содержит массив строк различной длины. Строка должна быть описана структурой с полями: • Длина строки • Массив символов Прим. : Такой формат имеет тип String в Pascal. Интерфейс должен позволять: • Вносить новые записи • Просматривать содержимое файла • Рассмотреть файл как последовательность битов. Если сумма всех битов,... подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1788 / 1163 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
04.06.2014, 13:44     STL и string
Тонкость в том, что в классе string (впрочем как и в vector) нет подходящей ф-и insert. Проблема возникает из-за того, что вставка может привести к перераспределению памяти для контейнера и как следствие все итераторы станут валидными. Думаю здесь лучше выполнять вставку копированием. Т.е. вводим вспомогательную строку в которую будем записывать исходную строку кусками. В тех местах где будет вхождение искомой подстроки мы добавляем к временной другую подстроку и продолжаем поиск подстроки дальше.
Примерная реализация(не проверял) :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  std::string text;
  std::string output;
  std::string w1, w2;
 
  std::cout << "Input w1: ";
  std::cin >> w1;
  std::cout << "Input w2: ";
  std::cin >> w2;
 
  //Заносим исходный текст в text
/*
...
*/
  
  std::string::iterator iterlo = text.begin();
  std::string::iterator iterhi = text.begin();
 
  do {
    iterhi = std::search(iterlo, text.end(), w1.begin(), w1.end());
    std::copy(iterlo, iterhi, std::back_inserter(output));
    if (iterhi != text.end())
      output += w1 + ' ' + w2;
    iterlo = iterhi + w1.size();
    iterhi = iterlo;
  } while(iterhi != text.end());
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru