Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2023, 23:58   #1
Shpite Shpinnete
Новичок
Джуниор
 
Регистрация: 28.01.2023
Сообщений: 1
По умолчанию Помогите пожалуйста найти ошибку в коде,не пишите новый лишь помогите найти проблему

проблема такова.пишу программу в которую сначала вводяться стоп слова.потом строка текста.и нужно сначала удалить из этой строки стоп слова а потом вывести их в квадратных скобках.почему то они не выводяться помогите пожалуйста.вот код
*********************************** *********************************** ***************
Код:
#include <iostream>
#include <string>
#include <vector>
#include <set>
using namespace std;


vector<string> SplitIntoWords(string text) {
    vector<string> words;
    string word;
    for (const char c : text) {
        if (c == ' ') {
            if (!word.empty()) {
                words.push_back(word);
                word.clear();
            }
        } else {
            word += c;
        }
    }
    if (!word.empty()) {
        words.push_back(word);
    }

    return words;
}



set<string> ComeBackToSet(string texta){
    set<string> normas(SplitIntoWords(texta).begin(), SplitIntoWords(texta).end());
    return normas;}
set<string> Konect(string stopslova, string normal){
    set<string> strochka = ComeBackToSet(normal);
    for (string word : SplitIntoWords(stopslova)){
        
        strochka.erase(word);    
    }    
    return strochka;
}
 vector<string> ComeBackToVectorGood(string stopsl, string super){
    vector<string> konechniy(Konect(stopsl, super).begin(), Konect(stopsl, super).end());
    return konechniy; 
 }

int main() {
    string stopslova;
    getline(cin, stopslova);
    string query;
    getline(cin, query);
   
    for (string word : ComeBackToVectorGood(stopslova, query)) {
        cout << '[' << word << ']' << endl;
    }
}

Последний раз редактировалось BDA; 29.01.2023 в 02:46.
Shpite Shpinnete вне форума Ответить с цитированием
Старый 29.01.2023, 02:52   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Функция возвращает новый объект при каждом вызове, так что нужно его сохранять и использовать:
Код:
set<string> ComeBackToSet(string texta){
    auto s = SplitIntoWords(texta);
    set<string> normas(s.begin(), s.end());
    return normas;
}
...
vector<string> ComeBackToVectorGood(string stopsl, string super){
    auto s = Konect(stopsl, super);
    vector<string> konechniy(s.begin(), s.end());
    return konechniy; 
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 06.02.2023, 05:11   #3
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Shpite Shpinnete, у вас такой мутный код, что его проще переписать, чем понять.
Код:
#include <string>
#include <set>
#include <iostream>

using namespace std;

set<string> get_discard_words(const char* text) {
  set<string> discard_words;
  int pos = 0;
  for (;;) {
    // сканируем пробелы
    while (text[pos] == ' ') {pos++;}
    if (text[pos] == '\0') {break;} // если дошли до конца текста
    // сканируем слово
    int start = pos;
    do {pos++;} while ((text[pos] != '\0') && (text[pos] != ' '));
    string word(text + start, pos - start);
    discard_words.insert(move(word));
  }
  return discard_words;
}

int main() {
  string text;
  getline(cin, text);
  set<string> discard_words = get_discard_words(text.c_str());

  getline(cin, text);
  cout << "Text without discard words: ";
  const char* text_p = text.c_str();
  int pos = 0;
  for (;;) {
    // сканируем пробелы
    int start = pos;
    while (text_p[pos] == ' ') {pos++;}
    // выводим пробелы
    cout.write(text_p + start, pos - start);
    if (text_p[pos] == '\0') {break;} // если дошли до конца текста
    // сканируем слово
    start = pos;
    do {pos++;} while ((text_p[pos] != '\0') && (text_p[pos] != ' '));
    string word(text_p + start, pos - start);
    if (discard_words.find(word) == discard_words.end()) { // если слово отсутствует в множестве
      // выводим слово
      cout << word;
    }
  }
  cout << endl;
  for (const string& w: discard_words) {
    cout << '[' << w << ']' << endl;
  }
  return 0;
}
Консоль:
Код:
the and
enter the arena and hit the lights
Text without discard words: enter  arena  hit  lights
[and]
[the]
Пётр Седов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите пожалуйста найти ошибку в коде semen901 JavaScript, Ajax 3 09.01.2020 21:03
Функция kub не возвращает значение. Помогите, пожалуйста, найти проблему в коде. Sinli Общие вопросы C/C++ 8 10.09.2018 13:12
Помогите пожалуйста найти ошибку в коде(main) С++ kirik1234 Помощь студентам 6 21.03.2018 14:24
Помогите, пожалуйста, найти ошибку в коде (найти сумму факториалов чётных чисел в заданном диапазоне) kris14 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2017 15:42
Помогите найти ошибку в коде, пожалуйста Gobl1n Паскаль, Turbo Pascal, PascalABC.NET 3 30.11.2008 17:44