1 / 11
Jun 2020

Cześć,
Czy ktoś mógłby naprowadżić mnie gdzie popełniam w tym zadaniu ?
https://pl.spoj.com/problems/AL_20_01/13

Niestety, otrzymuje odpowiedz od spoj - błedna odpowedz.
Czy ktoś mógłby podpowiedizeć gdzie jest bład ?

#include <iostream>
#include <string>
#include <vector>
#include <cctype>

using namespace std;

const int ilosc_testow = 100;

struct SMors
{
    string morse[26] = { ".-/", "-.../", "-.-./", "-../", "./", "..-./", "--./", "..../", "../", ".---/", "-.-/", ".-../", "--/", "-./", "---/", ".--./", "--.-/", ".-./", ".../", "-/", "..-/", "...-/", ".--/", "-..-/", "-.--/", "--../" };
    string Alfabet = { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" };

} Misiak;

int main()
{
    vector <string> nowy_tekst;
    string tekst;

    for (int y = 0; y < ilosc_testow; y++)
    {
        getline(cin, tekst);
        for (int i = 0; i < tekst.length() && i <= 1000; i++)
        {
            if (isspace(tekst[i]))
            {
                nowy_tekst.push_back("/");
            }
            for (int k = 0; k < Misiak.Alfabet.length(); k++)
            {
                if (toupper(tekst[i]) == Misiak.Alfabet[k])
                {
                    string schowek = Misiak.morse[k];
                    nowy_tekst.push_back(schowek);
                    break;
                }
            }
        }

        for (int z = 0; z < nowy_tekst.size(); z++)
        {
            cout << nowy_tekst[z];
        }
        cout << endl;
        nowy_tekst.clear();
    }   

    return 0;
}

pozdsrawiam :slight_smile:

  • created

    Jun '20
  • last reply

    Aug '20
  • 10

    replies

  • 883

    views

  • 6

    users

  • 1

    like

  • 2

    links

Nalezy testowac uzywajac przekierowania z pliku na wejscie standardowe. Nalezy zwrócic uwage na ilosc linijek na wyjsciu w przypadku testu z zadania, który ma 3 linijki.

Cześć
Czy Ktoś może mi powiedzieć gdzie popełniam błąd dlaczego z pętli for nie mogę od razu po kolei z stringa napis wyciągać Liter i findem wyszukiwać je w mapie i odrazu wyświetlać wartosć ? Jak wpisze "Przykładowa_Literka"to wyszukuje i wyświetla ładnie ale przy zapisie napis[i] jest błąd
z góry dziękuje za odpowiedź
Link do kodu https://ideone.com/S2tdvl12

Przyczyna: nie można skonwertować z “char” na “const std::basic_string<char,std::char_traits,std::allocator>”

napis[i] zwraca typ znakowy char. Dlatego sensowniej byłoby zrobić mapę przechowującą jako klucz chary:

map<char, string>mors;
mors['A'] = ".-"; // literał znakowy "A" -> 'A'
2 months later

Witam,

Również rozwiązuję to zadanie i SPOJ go nie akceptuje. Gdzie tkwi błąd?

       #include <iostream>
      #include <map>
     #include <string>

      using namespace std;


   int main() {
       string napisDoZaszyfrowania;

 const int liczbaWierszy = 100;
 const int dlugoscCiagu = 1000;

map <char, string> alfabetMorsa;

alfabetMorsa['A']=".-/";
alfabetMorsa['a']=".-/";
alfabetMorsa['B']="-.../";
alfabetMorsa['b']="-.../";
alfabetMorsa['C']="-.-./";
alfabetMorsa['c']="-.-/";
alfabetMorsa['D']="-../";
alfabetMorsa['d']="-../";
alfabetMorsa['E']="./";
alfabetMorsa['e']="./";
alfabetMorsa['F']=".-../";
alfabetMorsa['f']=".-../";
alfabetMorsa['G']="--./";
alfabetMorsa['g']="--./";
alfabetMorsa['H']="..../";
alfabetMorsa['h']="..../";
alfabetMorsa['I']="../";
alfabetMorsa['i']="../";
alfabetMorsa['J']=".---/";
alfabetMorsa['j']=".---/";
alfabetMorsa['K']="-.-/";
alfabetMorsa['k']="-.-/";
alfabetMorsa['L']="..-./";
alfabetMorsa['l']="..-./";
alfabetMorsa['M']="--/";
alfabetMorsa['m']="--/";
alfabetMorsa['N']="-./";
alfabetMorsa['n']="-./";
alfabetMorsa['O']="---/";
alfabetMorsa['o']="---/";
alfabetMorsa['P']=".--./";
alfabetMorsa['p']=".--./";
alfabetMorsa['Q']="--.-/";
alfabetMorsa['q']="--.-/";
alfabetMorsa['R']=".-./";
alfabetMorsa['r']=".-./";
alfabetMorsa['S']=".../";
alfabetMorsa['s']=".../";
alfabetMorsa['T']="-/";
alfabetMorsa['t']="-/";
alfabetMorsa['U']="..-/";
alfabetMorsa['u']="..-/";
alfabetMorsa['V']="...-/";
alfabetMorsa['v']="...-/";
alfabetMorsa['W']=".--/";
alfabetMorsa['w']=".--/";
alfabetMorsa['X']="-..-/";
alfabetMorsa['x']="-..-/";
alfabetMorsa['Y']="-.--/";
alfabetMorsa['y']="-.--/";
alfabetMorsa['Z']="--../";
alfabetMorsa['z']="--../";
alfabetMorsa[' ']="/";

for (int i = 0; i < liczbaWierszy; i++) {
    getline(cin, napisDoZaszyfrowania);
    for (int j = 0; (j < napisDoZaszyfrowania.length()) && (j <= dlugoscCiagu); j++)  {
        map <char, string> :: iterator itr = alfabetMorsa.find(napisDoZaszyfrowania[j]);

        if (itr!= alfabetMorsa.end()) {
            cout << itr->second;
        }

    }
    cout << "\n";
}
return 0;

}

Cytat z tresci zadania:

Wejście składa się z nieznanej liczby wierszy

Generalnie to getline() zwraca wartość bool (false, jeśli nie udało się odczytać), zatem może być użyty jako warunek pętli while. Poza tym np. dla litery c masz:

alfabetMorsa['C']="-.-./";
alfabetMorsa['c']="-.-/";

Czyli błąd zakradł się przy przepisywaniu szyfru.

Nieważne, już dział. Po prostu wstawiłam ‘/’ po każdej literze zamiast w poleceniu cout. Dzięki wszystkim za pomoc.