2016-08-26 4 views
-3

Я пытаюсь удалить определенные слова (которые находятся в строковом массиве) из предложения, которое находится в строке.C++ удалить соответствующие слова из строки

Здесь я хочу удалить строки, присутствующие в массиве tab из строки s. До сих пор я могу разбить строку, но не знаете, как проверить, если конкретная строка присутствует в массиве

#include <iostream> 
#include <string> 

int main() 
{ 
std::string s("Somewhere down the road"); 
std::string tab[2]={"The","the","THE"}; 

std::string::size_type prev_pos = 0, pos = 0; 
while((pos = s.find(' ', pos)) != std::string::npos) 
    { 
    std::string substring(s.substr(prev_pos, pos-prev_pos)); 
    std::cout << substring << '\n'; 
    prev_pos = ++pos; 
    } 
std::string substring(s.substr(prev_pos, pos-prev_pos)); 
std::cout << substring << '\n'; 
} 

кто может помочь здесь?

+1

«Не знаю, как» вы имеете в виду: 1) Я не могу вычислить алгоритм, и в этом случае это не имеет ничего общего с C++, или 2) Я знаю алгоритм, но я не уверен, как часть его будет переведена на C++, и в этом случае вы должны отредактировать свой вопрос, описать предложенный вами алгоритм и объяснить, в какой части его возникают проблемы с переводом на C++. –

+2

** Даже с Turbo C++: ** Правильным инструментом для решения таких проблем является ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+1

Изменить std :: string tab [2] на std :: string tab [3] – Mikhail

ответ

0
#include <iostream> 
#include <string> 
#include <stack> 
int main() 
{ 
    std::string s("Somewhere down the road"); 
    std::string tab[3] = { "The", "the", "THE" }; 

    std::string::size_type prev_pos = 0, pos = 0; 
    std::stack<std::pair<int,int>> erase_pairs; 
    while ((pos = s.find(' ', pos)) != std::string::npos) 
    { 
     std::string substring(s.substr(prev_pos, pos - prev_pos)); 
     std::cout << substring << '\n'; 
     for (auto t = 0; t < 3;t++) 
     { 
      if (substring == tab[t]) 
      { 
       erase_pairs.push(std::make_pair(prev_pos, pos - prev_pos)); 
      } 
     } 
     prev_pos = ++pos; 
    } 
    for (auto i = 0; i < erase_pairs.size();i++) 
    { 
     auto what = erase_pairs.top();//I cheated on my homework 
     erase_pairs.pop(); 
     s.erase(what.first, what.second); 
    } 
    std::string substring(s.substr(prev_pos, pos - prev_pos));//note you also gotta remove the spaces 
    std::cout << substring << '\n'; 
} 
Смежные вопросы