Loading...
PetarVasilev0903 avatar PetarVasilev0903 0 Точки

Помощ с Judge C++ Advanced Exam Preparation

01. Letters ми дава 0 точки въпреки че zero Test-та минава

Може ли някакъв съвет?

https://judge.softuni.org/Contests/Practice/Index/3037#0

Ето и кода.

#include <iostream>
#include <stack>
#include <string>
#include <sstream>
#include <cctype>
#include <queue>
#include <map>
#include <list>
#include <set>

using namespace std;

int main()
{

    string input;
    getline(cin, input);
    istringstream istr(input);

   set<string> text;

    while (istr >> input)
    {
        if (input.find('.') < input.length())
        {
            input.pop_back();
        }
        text.insert(input);
    }
    vector<char>characters;
    char symbol;

    while (true)
    {
        cin >> symbol;
        if (symbol == '.')
        {
            break;
        }
        
        characters.push_back(symbol);
    }

    

    for (int c = 0; c < characters.size(); c++)
    {

         bool HasAny = false;

        for (auto i = text.begin(); i != text.end(); i++)
        {
            string curWord = *i;
            
            if (curWord.find(tolower(characters[c]))<curWord.length() || curWord.find(toupper(characters[c]))<curWord.length())
            {
                cout << curWord << " ";
            }
        }

        if (HasAny)
        {
            cout << endl;
        }
        else
        {
            cout << "---";
        }

    }

    return 0;  
}

/*
You are given a text in English. Let’s define a word as any sequence of alphabetical characters. Each of those characters we’ll call a letter, but we will consider the uppercase and lowercase variant of a character in a word as the same letter.
a
Y
h
.
*/

 

 

Тагове:
0
C++ Programming 24/06/2022 17:19:51
MartinBG avatar MartinBG 4803 Точки

Ако се вярва на условието, word може да съдържа само букви (A-Z, a-z) и всеки друг символ трябва да се игнорира ( .,'0-9 и т.н.), като най-вероятно се приема за разделител между отделните думи.

Опитайте да четете входа символ по символ като проверявате всеки дали е буква и ако е - го дабавяте към текущата дума, а ако не е - го игнорирате, запазвате думата до момента и започвате нова дума.

Има и малък проблем в логиката с HasAny - не го ъпдейтвате при намиране на дума. Трябва да е нещо такова:
 

  for (int c = 0; c < characters.size(); c++) {

    bool HasAny = false;

    for (auto i = text.begin(); i != text.end(); i++) {
      string curWord = *i;

      if (curWord.find(tolower(characters[c])) < curWord.length() ||
          curWord.find(toupper(characters[c])) < curWord.length()) {
        cout << curWord << " ";
        HasAny = true; // <---- update
      }
    }

    if (!HasAny) {
      cout << "---";

    }
    cout << endl;

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.