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

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

Восстановить пароль Регистрация
 
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 22:48     Замена подстроки в строке #1
Так как не нашел алгоритм стемминга для 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."
Как исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 22:48     Замена подстроки в строке
Посмотрите здесь:

[B]Замена подстроки[/B] C++
C++ Замена подстроки в строке
C++ Поиск подстроки в строке
Поиск подстроки в строке и замена её на другую строку C++
C++ Поиск подстроки в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
25.02.2014, 22:51     Замена подстроки в строке #2
out_of_range вам ни о чем не говорит?
вне диапазона
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, "");   
}
А вместе нет? Почему такое может быть?
DU
1477 / 1053 / 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());
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.
..."
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.02.2014, 23:29     Замена подстроки в строке #6
ini.getUnions(i) - строку или символ возвращает?
если строку, тогда да, так не прокатит
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:34  [ТС]     Замена подстроки в строке #7
Строку
DU
1477 / 1053 / 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;
}
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();
};
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.02.2014, 23:56     Замена подстроки в строке #10
не важно как он выглядит. я думал вы догадаетесь скопировать пример себе и заменить
в 9 строчке
мое ini.size() на свое ini.getUniSize()
а в 11 строчке заменить
мое ini[i] на свое ini.getUnions(i)
ну и в других местах если понадобится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2014, 23:58     Замена подстроки в строке
Еще ссылки по теме:

C++ Замена подстроки в строке
Замена подстроки в строке C++
Замена подстроки в строке (с пробелами) C++

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

Или воспользуйтесь поиском по форуму:
eter4eter
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 16
25.02.2014, 23:58  [ТС]     Замена подстроки в строке #11
Да, благодарю! Все сделал и работает! Спасибо вам огромное!
Yandex
Объявления
25.02.2014, 23:58     Замена подстроки в строке
Ответ Создать тему
Опции темы

Текущее время: 19:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru