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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
#1

Замена подстроки в строке - C++

25.02.2014, 22:48. Просмотров 787. Ответов 10
Метки нет (Все метки)

Так как не нашел алгоритм стемминга для C++, то пришлось что-то придумывать самому.
Так вот есть такой код
C++
1
2
3
4
5
6
7
8
int i;
for(i = 0; i < ini.getUniSize(); ++i) // getUniSize() - извлекаем размер массива
{   
    while(sPos = str.find(ini.getUnions(i),0)) // getUnions(i) - извлекаем элемент массива с индексом i
    {   
        str.replace(sPos, 0, "");    // заменяем его на пустую строку
    }
}
Программа компилируется, запускается, но вылетает. Под отладчиком получаю
"Unhandled exception at at 0x74F9C41F in stemmer.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0030FD48."
Как исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 22:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена подстроки в строке (C++):

Замена подстроки в строке - C++
Дана строка. Заменить все подстроки “xz2” на запятые без подключения дополнительных библиотек. Написал такой код, но выводиться какой-то...

Замена подстроки в строке - C++
В строке нужно заменить подстроку aaa на 3(a). Помогите написать код без использования string.

Замена подстроки в строке - C++
здесь у меня такая проблема возникла мне нужно заменить все &quot;were&quot; на &quot;are&quot; но &quot;are&quot; меньше на 1 символ я незнаю как его можно заменить...

Замена подстроки в строке (с пробелами) - C++
вопрос: ввожу все строки и подстроки через gets, но когда начинается замена, пробелы не видит и удаляет по одному символу до пробела? как...

Функция: замена подстроки в строке на заданную строку - C++
Помогите пожалуйста с данной задачей: Реализовать на языке C функцию замены подстроки в строке на заданную строку.

Поиск подстроки в строке и замена её на другую строку - C++
Подскажите пожалуйста как мне поправить ошибку? Написал такую функцию. Всё работает правильно (т.е. он правильно находит подстроку,...

10
Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
25.02.2014, 22:51 #2
out_of_range вам ни о чем не говорит?
вне диапазона
0
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:00  [ТС] #3
Извините, но помогите, пожалуйста, найти проблему.
Так все работает
C++
1
2
3
4
for(i = 0; i < ini.getUniSize(); ++i)
{   
    cout << ini.getUnions(i) << endl;
}
C++
1
2
3
4
while(sPos = str.find(ini.getUnions(1),0))  
{   
    str.replace(sPos, 0, "");   
}
А вместе нет? Почему такое может быть?
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.02.2014, 23:18 #4
если вам нужно из строки удалить все, что есть в ini, то
C++
1
2
3
4
5
6
7
8
вместо
    while(sPos = str.find(ini.getUnions(i),0)) // getUnions(i) - извлекаем элемент массива с индексом i
    {   
        str.replace(sPos, 0, "");    // заменяем его на пустую строку
    }
 
попробуйте
  str.erase(std::remove(str.begin(), str.end(), ini.getUnions(i)), str.end());
0
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:27  [ТС] #5
При попытке
C++
1
str.erase(std::remove(str.begin(), str.end(), ini.getUnions(i)), str.end());
Получил вот такое

"1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(1774): error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "char" (или приемлемое преобразование отсутствует)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(347,5): error MSB6006: "CL.exe" завершилась с кодом 2.
..."
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.02.2014, 23:29 #6
ini.getUnions(i) - строку или символ возвращает?
если строку, тогда да, так не прокатит
0
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:34  [ТС] #7
Строку
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.02.2014, 23:38 #8
пот пример похожий на ваш. я не знаю что такое ini у вас. подозреваю что это что-то вроде вектора:
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
26
int main()
{
  std::vector<std::string> ini;
  ini.push_back("11");
  ini.push_back("22");
  ini.push_back("33");
 
  std::string str = "11aa22bbcc";
  for (unsigned i = 0; i < ini.size(); ++i)
  {
    const std::string& iniStr = ini[i];
    while (true)
    {
      const std::string::size_type pos = str.find(iniStr);
      if (pos == std::string::npos)
      {
        break;
      }
      str.replace(pos, iniStr.size(), "");
    }
  }
 
  std::cout << str << std::endl;
 
  return 0;
}
1
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:47  [ТС] #9
ini - класс. Выглядит пока что вот так
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Init
{
private:
    vector<string> definitions; // = 5;
    vector<string> unions;// = 21;
    vector<string> prepositions;// = 28;
    vector<string> closures;// = 18;
    vector<string> particles;// = 32;
    vector<string> prefix;// = 21;
    vector<string> suffix;// = 55;
 
    bool initDefinitions(int n = 5);
    bool initUnions(int n = 21);
    bool initPrepostitions(int n = 28);
    bool initClosures(int n = 18);
    bool initParticles(int n = 32);
    bool initPrefix(int n = 21);
    bool initSuffix(int n = 55);
 
public:
    Init(void);
    ~Init(void);
 
    string getDefinitions(int n = 0);
    string getUnions(int n = 0);
    string getPrepositions(int n = 0);
    string getClosures(int n = 0);
    string getParticles(int n = 0);
    string getPrefix(int n = 0);
    string getSuffix(int n = 0);
 
    int getDefSize();
    int getUniSize();
    int getPrepSize();
    int getCloSize();
    int getParSize();
    int getPrefSize();
    int getSufSize();
};
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.02.2014, 23:56 #10
не важно как он выглядит. я думал вы догадаетесь скопировать пример себе и заменить
в 9 строчке
мое ini.size() на свое ini.getUniSize()
а в 11 строчке заменить
мое ini[i] на свое ini.getUnions(i)
ну и в других местах если понадобится.
0
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:58  [ТС] #11
Да, благодарю! Все сделал и работает! Спасибо вам огромное!
0
25.02.2014, 23:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2014, 23:58
Привет! Вот еще темы с ответами:

Найти длину максимальной подстроки, такой что в этой подстроке не существует подстроки равной какой-то строке - C++
Не могу решить задачу, я понял саму задачу. Не могу написать код, помогите, плз! У Дроида-На2а есть строка S, и K строк ai. Ваша задача...

Замена подстроки - C++
Есть проблема с программой, которая меняет сокращения don't на do not и т.п . Если сокращение находится с 0 позиции, то функция find() не...

Замена одной подстроки на другую - C++
Есть ли функция, которая может заменить все вхождения подстроки strl на подстроку strl2? Если нет, то как это возможно осуществить? ...

Поиск подстроки в строке - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int GetLength(char* string) { int i; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru